home *** CD-ROM | disk | FTP | other *** search
/ Programming a Multiplayer FPS in DirectX / Programming a Multiplayer FPS in DirectX (Companion CD).iso / DirectX / dxsdk_oct2004.exe / dxsdk.exe / Utilities / MView / gxu / loadutil.cod < prev    next >
Encoding:
Text File  |  2004-09-30  |  185.8 KB  |  6,189 lines

  1. ; Listing generated by Microsoft (R) Optimizing Compiler Version 13.10.4035 
  2.  
  3.     TITLE    .\loadutil.cpp
  4.     .386P
  5. include listing.inc
  6. if @Version gt 510
  7. .model FLAT
  8. else
  9. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  10. _TEXT    ENDS
  11. _DATA    SEGMENT DWORD USE32 PUBLIC 'DATA'
  12. _DATA    ENDS
  13. CONST    SEGMENT DWORD USE32 PUBLIC 'CONST'
  14. CONST    ENDS
  15. _BSS    SEGMENT DWORD USE32 PUBLIC 'BSS'
  16. _BSS    ENDS
  17. $$SYMBOLS    SEGMENT BYTE USE32 'DEBSYM'
  18. $$SYMBOLS    ENDS
  19. _TLS    SEGMENT DWORD USE32 PUBLIC 'TLS'
  20. _TLS    ENDS
  21. ;    COMDAT ??0SLoadedFace@GXU@@QAE@XZ
  22. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  23. _TEXT    ENDS
  24. ;    COMDAT ?Init@SLoadedFace@GXU@@QAEXKKK@Z
  25. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  26. _TEXT    ENDS
  27. ;    COMDAT ?InitEmpty@SLoadedFace@GXU@@QAEXXZ
  28. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  29. _TEXT    ENDS
  30. ;    COMDAT ?SetVertexColor@GXU@@YAJPAUSLoadedFace@1@KAAUD3DXCOLOR@@PAPAUSLoadVertex@1@PAK3@Z
  31. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  32. _TEXT    ENDS
  33. ;    COMDAT ??0SLoadVertex@GXU@@QAE@XZ
  34. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  35. _TEXT    ENDS
  36. ;    COMDAT ?SetVertexAttributes@GXU@@YAJPAUSLoadedFace@1@KPAUD3DXVECTOR3@@PAUD3DXVECTOR2@@PAPAUSLoadVertex@1@PAK4@Z
  37. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  38. _TEXT    ENDS
  39. ;    COMDAT ?SetSmoothingGroup@GXU@@YAJPAUSLoadedFace@1@KGAAUD3DXVECTOR3@@PAPAUSLoadVertex@1@PAK3@Z
  40. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  41. _TEXT    ENDS
  42. ;    COMDAT ?FindPoint@GXU@@YAKPAKKPAUSLoadVertex@1@@Z
  43. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  44. _TEXT    ENDS
  45. ;    COMDAT ?InitVertices@GXU@@YAJAAPAUSLoadVertex@1@K@Z
  46. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  47. _TEXT    ENDS
  48. ;    COMDAT ?InitCorners@GXU@@YAJAAPAUSCorner@1@K@Z
  49. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  50. _TEXT    ENDS
  51. ;    COMDAT ??0SCorner@GXU@@QAE@XZ
  52. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  53. _TEXT    ENDS
  54. ;    COMDAT ?InitFaces@GXU@@YAJAAPAUSLoadedFace@1@K@Z
  55. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  56. _TEXT    ENDS
  57. ;    COMDAT ?BEqualWedges@GXU@@YA_NAAUSLoadVertex@1@0@Z
  58. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  59. _TEXT    ENDS
  60. ;    COMDAT ?ConvertColor@GXU@@YAKAAUD3DXCOLOR@@@Z
  61. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  62. _TEXT    ENDS
  63. ;    COMDAT ?SetMesh@GXU@@YAJAAPAUSLoadedFace@1@KAAPAUSLoadVertex@1@KPAUSCorner@1@KPAUSFVFData@1@HPAKKKPAUIDirect3DDevice9@@PAPAUID3DXMesh@@PAPAUID3DXBuffer@@@Z
  64. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  65. _TEXT    ENDS
  66. ;    COMDAT ?CreateMaterialBuffer@GXU@@YAJPAU_D3DXMATERIAL@@KPAPAUID3DXBuffer@@@Z
  67. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  68. _TEXT    ENDS
  69. ;    COMDAT ?MergeMaterialBuffers@GXU@@YAJPAUID3DXBuffer@@K0KPAPAU2@@Z
  70. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  71. _TEXT    ENDS
  72. ;    COMDAT ??_H@YGXPAXIHP6EPAX0@Z@Z
  73. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  74. _TEXT    ENDS
  75. ;    COMDAT ??$AddToDynamicArray@USLoadVertex@GXU@@@@YAHPAPAUSLoadVertex@GXU@@ABU01@PAK2@Z
  76. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  77. _TEXT    ENDS
  78. ;    COMDAT ?CbTexCoordSize@DXCrackFVF@@QAEKK@Z
  79. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  80. _TEXT    ENDS
  81. ;    COMDAT ?PuvGetTex1@DXCrackFVF@@QAEPAUD3DXVECTOR2@@PAX@Z
  82. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  83. _TEXT    ENDS
  84. ;    COMDAT ?CTexCoords@DXCrackFVF@@QAEKXZ
  85. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  86. _TEXT    ENDS
  87. ;    COMDAT ?SetSpecular@DXCrackFVF@@QAEXPAXK@Z
  88. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  89. _TEXT    ENDS
  90. ;    COMDAT ?BSpecular@DXCrackFVF@@QAE_NXZ
  91. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  92. _TEXT    ENDS
  93. ;    COMDAT ?SetWeight@DXCrackFVF@@QAEXPAXIM@Z
  94. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  95. _TEXT    ENDS
  96. ;    COMDAT ?CWeights@DXCrackFVF@@QAEKXZ
  97. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  98. _TEXT    ENDS
  99. ;    COMDAT ?SetTex1@DXCrackFVF@@QAEXPAXPAUD3DXVECTOR2@@@Z
  100. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  101. _TEXT    ENDS
  102. ;    COMDAT ?SetDiffuse@DXCrackFVF@@QAEXPAXK@Z
  103. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  104. _TEXT    ENDS
  105. ;    COMDAT ?SetNormal@DXCrackFVF@@QAEXPAXPAUD3DXVECTOR3@@@Z
  106. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  107. _TEXT    ENDS
  108. ;    COMDAT ?SetPosition@DXCrackFVF@@QAEXPAXPAUD3DXVECTOR3@@@Z
  109. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  110. _TEXT    ENDS
  111. ;    COMDAT ?BTex1@DXCrackFVF@@QAE_NXZ
  112. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  113. _TEXT    ENDS
  114. ;    COMDAT ?BDiffuse@DXCrackFVF@@QAE_NXZ
  115. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  116. _TEXT    ENDS
  117. ;    COMDAT ?D3DXVec3Length@@YAMPBUD3DXVECTOR3@@@Z
  118. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  119. _TEXT    ENDS
  120. ;    COMDAT _sqrtf
  121. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  122. _TEXT    ENDS
  123. ;    COMDAT ??_0D3DXVECTOR3@@QAEAAU0@M@Z
  124. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  125. _TEXT    ENDS
  126. ;    COMDAT ?D3DXVec3Cross@@YAPAUD3DXVECTOR3@@PAU1@PBU1@1@Z
  127. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  128. _TEXT    ENDS
  129. ;    COMDAT ??GD3DXVECTOR3@@QBE?AU0@ABU0@@Z
  130. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  131. _TEXT    ENDS
  132. ;    COMDAT ?BNormal@DXCrackFVF@@QAE_NXZ
  133. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  134. _TEXT    ENDS
  135. ;    COMDAT ?GetTexCoordSizes@DXCrackFVF@@QAEXPAK@Z
  136. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  137. _TEXT    ENDS
  138. ;    COMDAT ??0DXCrackFVF@@QAE@K@Z
  139. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  140. _TEXT    ENDS
  141. ;    COMDAT ??8D3DXVECTOR2@@QBEHABU0@@Z
  142. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  143. _TEXT    ENDS
  144. ;    COMDAT ??0D3DXVECTOR2@@QAE@MM@Z
  145. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  146. _TEXT    ENDS
  147. ;    COMDAT ??0D3DXCOLOR@@QAE@MMMM@Z
  148. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  149. _TEXT    ENDS
  150. ;    COMDAT ??0D3DXVECTOR3@@QAE@MMM@Z
  151. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  152. _TEXT    ENDS
  153. ;    COMDAT ??YD3DXVECTOR3@@QAEAAU0@ABU0@@Z
  154. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  155. _TEXT    ENDS
  156. ;    COMDAT ??8D3DXVECTOR3@@QBEHABU0@@Z
  157. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  158. _TEXT    ENDS
  159. ;    COMDAT ??9D3DXVECTOR2@@QBEHABU0@@Z
  160. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  161. _TEXT    ENDS
  162. ;    COMDAT ??9D3DXVECTOR3@@QBEHABU0@@Z
  163. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  164. _TEXT    ENDS
  165. ;    COMDAT ??0D3DXVECTOR2@@QAE@XZ
  166. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  167. _TEXT    ENDS
  168. ;    COMDAT ??0D3DXVECTOR3@@QAE@XZ
  169. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  170. _TEXT    ENDS
  171. ;    COMDAT ??8D3DXCOLOR@@QBEHABU0@@Z
  172. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  173. _TEXT    ENDS
  174. ;    COMDAT ??9D3DXCOLOR@@QBEHABU0@@Z
  175. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  176. _TEXT    ENDS
  177. ;    COMDAT ??0D3DXCOLOR@@QAE@XZ
  178. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  179. _TEXT    ENDS
  180. FLAT    GROUP _DATA, CONST, _BSS
  181.     ASSUME    CS: FLAT, DS: FLAT, SS: FLAT
  182. endif
  183.  
  184. INCLUDELIB LIBC
  185. INCLUDELIB OLDNAMES
  186.  
  187. CONST    SEGMENT
  188. _x_rgdwTexCoordSize DD 08H
  189.     DD    0cH
  190.     DD    010H
  191.     DD    04H
  192. CONST    ENDS
  193. PUBLIC    ?Init@SLoadedFace@GXU@@QAEXKKK@Z        ; GXU::SLoadedFace::Init
  194. ; Function compile flags: /Ogs
  195. ; File d:\builds\nt32_fre\multimedia\directx\dxsdk\src\mview\gxu\loadutil.h
  196. ;    COMDAT ?Init@SLoadedFace@GXU@@QAEXKKK@Z
  197. _TEXT    SEGMENT
  198. _w0$ = 8                        ; size = 4
  199. _w1$ = 12                        ; size = 4
  200. _w2$ = 16                        ; size = 4
  201. ?Init@SLoadedFace@GXU@@QAEXKKK@Z PROC NEAR        ; GXU::SLoadedFace::Init, COMDAT
  202. ; _this$ = ecx
  203.  
  204. ; 63   :     }
  205.  
  206.   00000    8b ff         npad     2
  207.  
  208. ; 55   :     {
  209.  
  210.   00002    55         push     ebp
  211.   00003    8b ec         mov     ebp, esp
  212.  
  213. ; 56   :         m_bColorSpecified = false;
  214. ; 57   :         m_bMaterialSpecified = false;
  215. ; 58   :         m_bAttributeSpecified = false;
  216. ; 59   :         m_bSmoothingGroupSpecified = false;
  217. ; 60   :         m_wIndices[0] = w0;
  218.  
  219.   00005    8b 45 08     mov     eax, DWORD PTR _w0$[ebp]
  220.   00008    80 61 0c f0     and     BYTE PTR [ecx+12], -16    ; fffffff0H
  221.   0000c    89 01         mov     DWORD PTR [ecx], eax
  222.  
  223. ; 61   :         m_wIndices[1] = w1;
  224.  
  225.   0000e    8b 45 0c     mov     eax, DWORD PTR _w1$[ebp]
  226.   00011    89 41 04     mov     DWORD PTR [ecx+4], eax
  227.  
  228. ; 62   :         m_wIndices[2] = w2;
  229.  
  230.   00014    8b 45 10     mov     eax, DWORD PTR _w2$[ebp]
  231.   00017    89 41 08     mov     DWORD PTR [ecx+8], eax
  232.  
  233. ; 63   :     }
  234.  
  235.   0001a    5d         pop     ebp
  236.   0001b    c2 0c 00     ret     12            ; 0000000cH
  237. ?Init@SLoadedFace@GXU@@QAEXKKK@Z ENDP            ; GXU::SLoadedFace::Init
  238. _TEXT    ENDS
  239. PUBLIC    ?InitEmpty@SLoadedFace@GXU@@QAEXXZ        ; GXU::SLoadedFace::InitEmpty
  240. ; Function compile flags: /Ogs
  241. ;    COMDAT ?InitEmpty@SLoadedFace@GXU@@QAEXXZ
  242. _TEXT    SEGMENT
  243. ?InitEmpty@SLoadedFace@GXU@@QAEXXZ PROC NEAR        ; GXU::SLoadedFace::InitEmpty, COMDAT
  244. ; _this$ = ecx
  245.  
  246. ; 67   :         Init(UNUSED32, UNUSED32, UNUSED32);
  247.  
  248.   00000    80 61 0c f0     and     BYTE PTR [ecx+12], -16    ; fffffff0H
  249.   00004    83 09 ff     or     DWORD PTR [ecx], -1
  250.   00007    83 49 04 ff     or     DWORD PTR [ecx+4], -1
  251.   0000b    83 49 08 ff     or     DWORD PTR [ecx+8], -1
  252.  
  253. ; 68   :     }
  254.  
  255.   0000f    c3         ret     0
  256. ?InitEmpty@SLoadedFace@GXU@@QAEXXZ ENDP            ; GXU::SLoadedFace::InitEmpty
  257. _TEXT    ENDS
  258. PUBLIC    ?FindPoint@GXU@@YAKPAKKPAUSLoadVertex@1@@Z    ; GXU::FindPoint
  259. ; Function compile flags: /Ogs
  260. ; File d:\builds\nt32_fre\multimedia\directx\dxsdk\src\mview\gxu\loadutil.cpp
  261. ;    COMDAT ?FindPoint@GXU@@YAKPAKKPAUSLoadVertex@1@@Z
  262. _TEXT    SEGMENT
  263. _pwIndices$ = 8                        ; size = 4
  264. _iPointSearch$ = 12                    ; size = 4
  265. _rglvVerts$ = 16                    ; size = 4
  266. ?FindPoint@GXU@@YAKPAKKPAUSLoadVertex@1@@Z PROC NEAR    ; GXU::FindPoint, COMDAT
  267.  
  268. ; 369  :         {
  269. ; 370  :             break;
  270. ; 371  :         }
  271. ; 372  :     }
  272. ; 373  : 
  273. ; 374  :     return iPoint;
  274. ; 375  : }
  275.  
  276.   00000    8b ff         npad     2
  277.  
  278. ; 359  : {
  279.  
  280.   00002    55         push     ebp
  281.   00003    8b ec         mov     ebp, esp
  282.  
  283. ; 360  :     DWORD iPoint;
  284. ; 361  : 
  285. ; 362  :     // get the representative for the point, so that we can compare
  286. ; 363  :     //   them, this function compares the logical points in the mesh
  287. ; 364  :     DWORD wPointSearchRep = rglvVerts[iPointSearch].m_wPointRep;
  288.  
  289.   00005    8b 45 0c     mov     eax, DWORD PTR _iPointSearch$[ebp]
  290.   00008    8b 4d 10     mov     ecx, DWORD PTR _rglvVerts$[ebp]
  291.   0000b    6b c0 44     imul     eax, 68            ; 00000044H
  292.   0000e    8b 54 08 30     mov     edx, DWORD PTR [eax+ecx+48]
  293.  
  294. ; 365  : 
  295. ; 366  :     for (iPoint = 0; iPoint < 3; iPoint++)
  296.  
  297.   00012    33 c0         xor     eax, eax
  298.   00014    56         push     esi
  299. $L56514:
  300.  
  301. ; 367  :     {
  302. ; 368  :         if (rglvVerts[pwIndices[iPoint]].m_wPointRep == wPointSearchRep)
  303.  
  304.   00015    8b 75 08     mov     esi, DWORD PTR _pwIndices$[ebp]
  305.   00018    8b 34 86     mov     esi, DWORD PTR [esi+eax*4]
  306.   0001b    6b f6 44     imul     esi, 68            ; 00000044H
  307.   0001e    39 54 0e 30     cmp     DWORD PTR [esi+ecx+48], edx
  308.   00022    74 06         je     SHORT $L57039
  309.   00024    40         inc     eax
  310.   00025    83 f8 03     cmp     eax, 3
  311.   00028    72 eb         jb     SHORT $L56514
  312. $L57039:
  313.   0002a    5e         pop     esi
  314.  
  315. ; 369  :         {
  316. ; 370  :             break;
  317. ; 371  :         }
  318. ; 372  :     }
  319. ; 373  : 
  320. ; 374  :     return iPoint;
  321. ; 375  : }
  322.  
  323.   0002b    5d         pop     ebp
  324.   0002c    c3         ret     0
  325. ?FindPoint@GXU@@YAKPAKKPAUSLoadVertex@1@@Z ENDP        ; GXU::FindPoint
  326. _TEXT    ENDS
  327. PUBLIC    _sqrtf
  328. EXTRN    __fltused:NEAR
  329. ; Function compile flags: /Ogs
  330. ; File d:\builds\nt32_fre\public\sdk\inc\crt\math.h
  331. ;    COMDAT _sqrtf
  332. _TEXT    SEGMENT
  333. __X$ = 8                        ; size = 4
  334. _sqrtf    PROC NEAR                    ; COMDAT
  335.  
  336. ; 458  :         {return ((float)sqrt((double)_X)); }
  337.  
  338.   00000    8b ff         npad     2
  339.   00002    55         push     ebp
  340.   00003    8b ec         mov     ebp, esp
  341.   00005    d9 45 08     fld     DWORD PTR __X$[ebp]
  342.   00008    d9 fa         fsqrt
  343.   0000a    5d         pop     ebp
  344.   0000b    c3         ret     0
  345. _sqrtf    ENDP
  346. _TEXT    ENDS
  347. PUBLIC    ??0D3DXVECTOR2@@QAE@XZ                ; D3DXVECTOR2::D3DXVECTOR2
  348. ; Function compile flags: /Ogs
  349. ; File d:\builds\nt32_fre\public\sdk\inc\d3dx9math.h
  350. ;    COMDAT ??0D3DXVECTOR2@@QAE@XZ
  351. _TEXT    SEGMENT
  352. ??0D3DXVECTOR2@@QAE@XZ PROC NEAR            ; D3DXVECTOR2::D3DXVECTOR2, COMDAT
  353. ; _this$ = ecx
  354.  
  355. ; 91   :     D3DXVECTOR2() {};
  356.  
  357.   00000    8b c1         mov     eax, ecx
  358.   00002    c3         ret     0
  359. ??0D3DXVECTOR2@@QAE@XZ ENDP                ; D3DXVECTOR2::D3DXVECTOR2
  360. _TEXT    ENDS
  361. PUBLIC    ??0D3DXVECTOR3@@QAE@XZ                ; D3DXVECTOR3::D3DXVECTOR3
  362. ; Function compile flags: /Ogs
  363. ;    COMDAT ??0D3DXVECTOR3@@QAE@XZ
  364. _TEXT    SEGMENT
  365. ??0D3DXVECTOR3@@QAE@XZ PROC NEAR            ; D3DXVECTOR3::D3DXVECTOR3, COMDAT
  366. ; _this$ = ecx
  367.  
  368. ; 165  :     D3DXVECTOR3() {};
  369.  
  370.   00000    8b c1         mov     eax, ecx
  371.   00002    c3         ret     0
  372. ??0D3DXVECTOR3@@QAE@XZ ENDP                ; D3DXVECTOR3::D3DXVECTOR3
  373. _TEXT    ENDS
  374. PUBLIC    ?ConvertColor@GXU@@YAKAAUD3DXCOLOR@@@Z        ; GXU::ConvertColor
  375. PUBLIC    __real@00000000
  376. PUBLIC    __real@3f800000
  377. PUBLIC    __real@437f0000
  378. PUBLIC    __real@3f000000
  379. EXTRN    __ftol:NEAR
  380. ;    COMDAT __real@00000000
  381. ; File d:\builds\nt32_fre\multimedia\directx\dxsdk\src\mview\gxu\loadutil.cpp
  382. CONST    SEGMENT
  383. __real@00000000 DD 000000000r            ; 0
  384. CONST    ENDS
  385. ;    COMDAT __real@3f800000
  386. CONST    SEGMENT
  387. __real@3f800000 DD 03f800000r            ; 1
  388. CONST    ENDS
  389. ;    COMDAT __real@437f0000
  390. CONST    SEGMENT
  391. __real@437f0000 DD 0437f0000r            ; 255
  392. CONST    ENDS
  393. ;    COMDAT __real@3f000000
  394. CONST    SEGMENT
  395. __real@3f000000 DD 03f000000r            ; 0.5
  396. ; Function compile flags: /Ogs
  397. CONST    ENDS
  398. ;    COMDAT ?ConvertColor@GXU@@YAKAAUD3DXCOLOR@@@Z
  399. _TEXT    SEGMENT
  400. __g$ = -4                        ; size = 4
  401. __r$ = 8                        ; size = 4
  402. _color$ = 8                        ; size = 4
  403. ?ConvertColor@GXU@@YAKAAUD3DXCOLOR@@@Z PROC NEAR    ; GXU::ConvertColor, COMDAT
  404.  
  405. ; 488  : }
  406.  
  407.   00000    8b ff         npad     2
  408.  
  409. ; 473  : {
  410.  
  411.   00002    55         push     ebp
  412.   00003    8b ec         mov     ebp, esp
  413.   00005    51         push     ecx
  414.  
  415. ; 474  :     DWORD _r, _g, _b, _a;
  416. ; 475  :     if (color.r < 0.0f) _r = 0;
  417.  
  418.   00006    d9 05 00 00 00
  419.     00         fld     DWORD PTR __real@00000000
  420.   0000c    53         push     ebx
  421.   0000d    56         push     esi
  422.   0000e    8b 75 08     mov     esi, DWORD PTR _color$[ebp]
  423.   00011    d8 16         fcom     DWORD PTR [esi]
  424.   00013    57         push     edi
  425.   00014    d9 05 00 00 00
  426.     00         fld     DWORD PTR __real@3f800000
  427.   0001a    bf ff 00 00 00     mov     edi, 255        ; 000000ffH
  428.   0001f    df e0         fnstsw     ax
  429.   00021    f6 c4 41     test     ah, 65            ; 00000041H
  430.   00024    75 06         jne     SHORT $L56597
  431.   00026    83 65 08 00     and     DWORD PTR __r$[ebp], 0
  432.  
  433. ; 476  :     else if (color.r > 1.0f) _r = 0xff;
  434.  
  435.   0002a    eb 24         jmp     SHORT $L56600
  436. $L56597:
  437.   0002c    d8 16         fcom     DWORD PTR [esi]
  438.   0002e    df e0         fnstsw     ax
  439.   00030    f6 c4 05     test     ah, 5
  440.   00033    7a 05         jp     SHORT $L56599
  441.   00035    89 7d 08     mov     DWORD PTR __r$[ebp], edi
  442.  
  443. ; 477  :     else _r = (DWORD) (color.r*255.0f+0.5f);
  444.  
  445.   00038    eb 16         jmp     SHORT $L56600
  446. $L56599:
  447.   0003a    d9 06         fld     DWORD PTR [esi]
  448.   0003c    d8 0d 00 00 00
  449.     00         fmul     DWORD PTR __real@437f0000
  450.   00042    d8 05 00 00 00
  451.     00         fadd     DWORD PTR __real@3f000000
  452.   00048    e8 00 00 00 00     call     __ftol
  453.   0004d    89 45 08     mov     DWORD PTR __r$[ebp], eax
  454. $L56600:
  455.  
  456. ; 478  :     if (color.g < 0.0f) _g = 0;
  457.  
  458.   00050    d9 46 04     fld     DWORD PTR [esi+4]
  459.   00053    d8 da         fcomp     ST(2)
  460.   00055    df e0         fnstsw     ax
  461.   00057    f6 c4 05     test     ah, 5
  462.   0005a    7a 06         jp     SHORT $L56602
  463.   0005c    83 65 fc 00     and     DWORD PTR __g$[ebp], 0
  464.  
  465. ; 479  :     else if (color.g > 1.0f) _g = 0xff;
  466.  
  467.   00060    eb 26         jmp     SHORT $L56605
  468. $L56602:
  469.   00062    d8 56 04     fcom     DWORD PTR [esi+4]
  470.   00065    df e0         fnstsw     ax
  471.   00067    f6 c4 05     test     ah, 5
  472.   0006a    7a 05         jp     SHORT $L56604
  473.   0006c    89 7d fc     mov     DWORD PTR __g$[ebp], edi
  474.  
  475. ; 480  :     else _g = (DWORD) (color.g*255.0f+0.5f);
  476.  
  477.   0006f    eb 17         jmp     SHORT $L56605
  478. $L56604:
  479.   00071    d9 46 04     fld     DWORD PTR [esi+4]
  480.   00074    d8 0d 00 00 00
  481.     00         fmul     DWORD PTR __real@437f0000
  482.   0007a    d8 05 00 00 00
  483.     00         fadd     DWORD PTR __real@3f000000
  484.   00080    e8 00 00 00 00     call     __ftol
  485.   00085    89 45 fc     mov     DWORD PTR __g$[ebp], eax
  486. $L56605:
  487.  
  488. ; 481  :     if (color.b < 0.0f) _b = 0;
  489.  
  490.   00088    d9 46 08     fld     DWORD PTR [esi+8]
  491.   0008b    d8 da         fcomp     ST(2)
  492.   0008d    df e0         fnstsw     ax
  493.   0008f    f6 c4 05     test     ah, 5
  494.   00092    7a 06         jp     SHORT $L56607
  495.   00094    dd d8         fstp     ST(0)
  496.   00096    33 db         xor     ebx, ebx
  497.  
  498. ; 482  :     else if (color.b > 1.0f) _b = 0xff;
  499.  
  500.   00098    eb 24         jmp     SHORT $L56610
  501. $L56607:
  502.   0009a    d8 5e 08     fcomp     DWORD PTR [esi+8]
  503.   0009d    df e0         fnstsw     ax
  504.   0009f    f6 c4 05     test     ah, 5
  505.   000a2    7a 04         jp     SHORT $L56609
  506.   000a4    8b df         mov     ebx, edi
  507.  
  508. ; 483  :     else _b = (DWORD) (color.b*255.0f+0.5f);
  509.  
  510.   000a6    eb 16         jmp     SHORT $L56610
  511. $L56609:
  512.   000a8    d9 46 08     fld     DWORD PTR [esi+8]
  513.   000ab    d8 0d 00 00 00
  514.     00         fmul     DWORD PTR __real@437f0000
  515.   000b1    d8 05 00 00 00
  516.     00         fadd     DWORD PTR __real@3f000000
  517.   000b7    e8 00 00 00 00     call     __ftol
  518.   000bc    8b d8         mov     ebx, eax
  519. $L56610:
  520.  
  521. ; 484  :     if (color.a < 0.0f) _a = 0;
  522.  
  523.   000be    d8 5e 0c     fcomp     DWORD PTR [esi+12]
  524.   000c1    df e0         fnstsw     ax
  525.   000c3    f6 c4 41     test     ah, 65            ; 00000041H
  526.   000c6    75 04         jne     SHORT $L56612
  527.   000c8    33 c0         xor     eax, eax
  528.  
  529. ; 485  :     else if (color.a > 1.0f) _a = 0xff;
  530.  
  531.   000ca    eb 28         jmp     SHORT $L56615
  532. $L56612:
  533.   000cc    d9 46 0c     fld     DWORD PTR [esi+12]
  534.   000cf    d8 1d 00 00 00
  535.     00         fcomp     DWORD PTR __real@3f800000
  536.   000d5    df e0         fnstsw     ax
  537.   000d7    f6 c4 41     test     ah, 65            ; 00000041H
  538.   000da    75 04         jne     SHORT $L56614
  539.   000dc    8b c7         mov     eax, edi
  540.  
  541. ; 486  :     else _a = (DWORD) (color.a*255.0f+0.5f);
  542.  
  543.   000de    eb 14         jmp     SHORT $L56615
  544. $L56614:
  545.   000e0    d9 46 0c     fld     DWORD PTR [esi+12]
  546.   000e3    d8 0d 00 00 00
  547.     00         fmul     DWORD PTR __real@437f0000
  548.   000e9    d8 05 00 00 00
  549.     00         fadd     DWORD PTR __real@3f000000
  550.   000ef    e8 00 00 00 00     call     __ftol
  551. $L56615:
  552.  
  553. ; 487  :     return RGBA_MAKE( _r, _g, _b, _a);
  554.  
  555.   000f4    c1 e0 08     shl     eax, 8
  556.   000f7    0b 45 08     or     eax, DWORD PTR __r$[ebp]
  557.   000fa    5f         pop     edi
  558.   000fb    c1 e0 08     shl     eax, 8
  559.   000fe    0b 45 fc     or     eax, DWORD PTR __g$[ebp]
  560.   00101    5e         pop     esi
  561.   00102    c1 e0 08     shl     eax, 8
  562.   00105    0b c3         or     eax, ebx
  563.   00107    5b         pop     ebx
  564.  
  565. ; 488  : }
  566.  
  567.   00108    c9         leave
  568.   00109    c3         ret     0
  569. ?ConvertColor@GXU@@YAKAAUD3DXCOLOR@@@Z ENDP        ; GXU::ConvertColor
  570. _TEXT    ENDS
  571. PUBLIC    ??0D3DXCOLOR@@QAE@XZ                ; D3DXCOLOR::D3DXCOLOR
  572. ; Function compile flags: /Ogs
  573. ; File d:\builds\nt32_fre\public\sdk\inc\d3dx9math.h
  574. ;    COMDAT ??0D3DXCOLOR@@QAE@XZ
  575. _TEXT    SEGMENT
  576. ??0D3DXCOLOR@@QAE@XZ PROC NEAR                ; D3DXCOLOR::D3DXCOLOR, COMDAT
  577. ; _this$ = ecx
  578.  
  579. ; 516  :     D3DXCOLOR() {}
  580.  
  581.   00000    8b c1         mov     eax, ecx
  582.   00002    c3         ret     0
  583. ??0D3DXCOLOR@@QAE@XZ ENDP                ; D3DXCOLOR::D3DXCOLOR
  584. _TEXT    ENDS
  585. PUBLIC    ??0D3DXVECTOR2@@QAE@MM@Z            ; D3DXVECTOR2::D3DXVECTOR2
  586. ; Function compile flags: /Ogs
  587. ; File d:\builds\nt32_fre\public\sdk\inc\d3dx9math.inl
  588. ;    COMDAT ??0D3DXVECTOR2@@QAE@MM@Z
  589. _TEXT    SEGMENT
  590. _fx$ = 8                        ; size = 4
  591. _fy$ = 12                        ; size = 4
  592. ??0D3DXVECTOR2@@QAE@MM@Z PROC NEAR            ; D3DXVECTOR2::D3DXVECTOR2, COMDAT
  593. ; _this$ = ecx
  594.  
  595. ; 93   : }
  596.  
  597.   00000    8b ff         npad     2
  598.  
  599. ; 90   : {
  600.  
  601.   00002    55         push     ebp
  602.   00003    8b ec         mov     ebp, esp
  603.   00005    8b c1         mov     eax, ecx
  604.  
  605. ; 91   :     x = fx;
  606.  
  607.   00007    8b 4d 08     mov     ecx, DWORD PTR _fx$[ebp]
  608.   0000a    89 08         mov     DWORD PTR [eax], ecx
  609.  
  610. ; 92   :     y = fy;
  611.  
  612.   0000c    8b 4d 0c     mov     ecx, DWORD PTR _fy$[ebp]
  613.   0000f    89 48 04     mov     DWORD PTR [eax+4], ecx
  614.  
  615. ; 93   : }
  616.  
  617.   00012    5d         pop     ebp
  618.   00013    c2 08 00     ret     8
  619. ??0D3DXVECTOR2@@QAE@MM@Z ENDP                ; D3DXVECTOR2::D3DXVECTOR2
  620. _TEXT    ENDS
  621. PUBLIC    ??8D3DXVECTOR2@@QBEHABU0@@Z            ; D3DXVECTOR2::operator==
  622. ; Function compile flags: /Ogs
  623. ;    COMDAT ??8D3DXVECTOR2@@QBEHABU0@@Z
  624. _TEXT    SEGMENT
  625. _v$ = 8                            ; size = 4
  626. ??8D3DXVECTOR2@@QBEHABU0@@Z PROC NEAR            ; D3DXVECTOR2::operator==, COMDAT
  627. ; _this$ = ecx
  628.  
  629. ; 195  : }
  630.  
  631.   00000    8b ff         npad     2
  632.  
  633. ; 193  : {
  634.  
  635.   00002    55         push     ebp
  636.   00003    8b ec         mov     ebp, esp
  637.  
  638. ; 194  :     return x == v.x && y == v.y;
  639.  
  640.   00005    8b 55 08     mov     edx, DWORD PTR _v$[ebp]
  641.   00008    d9 02         fld     DWORD PTR [edx]
  642.   0000a    d9 01         fld     DWORD PTR [ecx]
  643.   0000c    da e9         fucompp
  644.   0000e    df e0         fnstsw     ax
  645.   00010    f6 c4 44     test     ah, 68            ; 00000044H
  646.   00013    7a 14         jp     SHORT $L57061
  647.   00015    d9 42 04     fld     DWORD PTR [edx+4]
  648.   00018    d9 41 04     fld     DWORD PTR [ecx+4]
  649.   0001b    da e9         fucompp
  650.   0001d    df e0         fnstsw     ax
  651.   0001f    f6 c4 44     test     ah, 68            ; 00000044H
  652.   00022    7a 05         jp     SHORT $L57061
  653.   00024    33 c0         xor     eax, eax
  654.   00026    40         inc     eax
  655.   00027    eb 02         jmp     SHORT $L57062
  656. $L57061:
  657.   00029    33 c0         xor     eax, eax
  658. $L57062:
  659.  
  660. ; 195  : }
  661.  
  662.   0002b    5d         pop     ebp
  663.   0002c    c2 04 00     ret     4
  664. ??8D3DXVECTOR2@@QBEHABU0@@Z ENDP            ; D3DXVECTOR2::operator==
  665. _TEXT    ENDS
  666. PUBLIC    ??9D3DXVECTOR2@@QBEHABU0@@Z            ; D3DXVECTOR2::operator!=
  667. ; Function compile flags: /Ogs
  668. ;    COMDAT ??9D3DXVECTOR2@@QBEHABU0@@Z
  669. _TEXT    SEGMENT
  670. _v$ = 8                            ; size = 4
  671. ??9D3DXVECTOR2@@QBEHABU0@@Z PROC NEAR            ; D3DXVECTOR2::operator!=, COMDAT
  672. ; _this$ = ecx
  673.  
  674. ; 201  : }
  675.  
  676.   00000    8b ff         npad     2
  677.  
  678. ; 199  : {
  679.  
  680.   00002    55         push     ebp
  681.   00003    8b ec         mov     ebp, esp
  682.  
  683. ; 200  :     return x != v.x || y != v.y;
  684.  
  685.   00005    8b 55 08     mov     edx, DWORD PTR _v$[ebp]
  686.   00008    d9 02         fld     DWORD PTR [edx]
  687.   0000a    d9 01         fld     DWORD PTR [ecx]
  688.   0000c    da e9         fucompp
  689.   0000e    df e0         fnstsw     ax
  690.   00010    f6 c4 44     test     ah, 68            ; 00000044H
  691.   00013    7a 13         jp     SHORT $L57064
  692.   00015    d9 42 04     fld     DWORD PTR [edx+4]
  693.   00018    d9 41 04     fld     DWORD PTR [ecx+4]
  694.   0001b    da e9         fucompp
  695.   0001d    df e0         fnstsw     ax
  696.   0001f    f6 c4 44     test     ah, 68            ; 00000044H
  697.   00022    7a 04         jp     SHORT $L57064
  698.   00024    33 c0         xor     eax, eax
  699.   00026    eb 03         jmp     SHORT $L57065
  700. $L57064:
  701.   00028    33 c0         xor     eax, eax
  702.   0002a    40         inc     eax
  703. $L57065:
  704.  
  705. ; 201  : }
  706.  
  707.   0002b    5d         pop     ebp
  708.   0002c    c2 04 00     ret     4
  709. ??9D3DXVECTOR2@@QBEHABU0@@Z ENDP            ; D3DXVECTOR2::operator!=
  710. _TEXT    ENDS
  711. PUBLIC    ??0D3DXVECTOR3@@QAE@MMM@Z            ; D3DXVECTOR3::D3DXVECTOR3
  712. ; Function compile flags: /Ogs
  713. ;    COMDAT ??0D3DXVECTOR3@@QAE@MMM@Z
  714. _TEXT    SEGMENT
  715. _fx$ = 8                        ; size = 4
  716. _fy$ = 12                        ; size = 4
  717. _fz$ = 16                        ; size = 4
  718. ??0D3DXVECTOR3@@QAE@MMM@Z PROC NEAR            ; D3DXVECTOR3::D3DXVECTOR3, COMDAT
  719. ; _this$ = ecx
  720.  
  721. ; 308  : }
  722.  
  723.   00000    8b ff         npad     2
  724.  
  725. ; 304  : {
  726.  
  727.   00002    55         push     ebp
  728.   00003    8b ec         mov     ebp, esp
  729.   00005    8b c1         mov     eax, ecx
  730.  
  731. ; 305  :     x = fx;
  732.  
  733.   00007    8b 4d 08     mov     ecx, DWORD PTR _fx$[ebp]
  734.   0000a    89 08         mov     DWORD PTR [eax], ecx
  735.  
  736. ; 306  :     y = fy;
  737.  
  738.   0000c    8b 4d 0c     mov     ecx, DWORD PTR _fy$[ebp]
  739.   0000f    89 48 04     mov     DWORD PTR [eax+4], ecx
  740.  
  741. ; 307  :     z = fz;
  742.  
  743.   00012    8b 4d 10     mov     ecx, DWORD PTR _fz$[ebp]
  744.   00015    89 48 08     mov     DWORD PTR [eax+8], ecx
  745.  
  746. ; 308  : }
  747.  
  748.   00018    5d         pop     ebp
  749.   00019    c2 0c 00     ret     12            ; 0000000cH
  750. ??0D3DXVECTOR3@@QAE@MMM@Z ENDP                ; D3DXVECTOR3::D3DXVECTOR3
  751. _TEXT    ENDS
  752. PUBLIC    ??YD3DXVECTOR3@@QAEAAU0@ABU0@@Z            ; D3DXVECTOR3::operator+=
  753. ; Function compile flags: /Ogs
  754. ;    COMDAT ??YD3DXVECTOR3@@QAEAAU0@ABU0@@Z
  755. _TEXT    SEGMENT
  756. _v$ = 8                            ; size = 4
  757. ??YD3DXVECTOR3@@QAEAAU0@ABU0@@Z PROC NEAR        ; D3DXVECTOR3::operator+=, COMDAT
  758. ; _this$ = ecx
  759.  
  760. ; 332  :     return *this;
  761. ; 333  : }
  762.  
  763.   00000    8b ff         npad     2
  764.  
  765. ; 328  : {
  766.  
  767.   00002    55         push     ebp
  768.   00003    8b ec         mov     ebp, esp
  769.   00005    8b c1         mov     eax, ecx
  770.  
  771. ; 329  :     x += v.x;
  772.  
  773.   00007    8b 4d 08     mov     ecx, DWORD PTR _v$[ebp]
  774.   0000a    d9 01         fld     DWORD PTR [ecx]
  775.   0000c    d8 00         fadd     DWORD PTR [eax]
  776.   0000e    d9 18         fstp     DWORD PTR [eax]
  777.  
  778. ; 330  :     y += v.y;
  779.  
  780.   00010    d9 41 04     fld     DWORD PTR [ecx+4]
  781.   00013    d8 40 04     fadd     DWORD PTR [eax+4]
  782.   00016    d9 58 04     fstp     DWORD PTR [eax+4]
  783.  
  784. ; 331  :     z += v.z;
  785.  
  786.   00019    d9 41 08     fld     DWORD PTR [ecx+8]
  787.   0001c    d8 40 08     fadd     DWORD PTR [eax+8]
  788.   0001f    d9 58 08     fstp     DWORD PTR [eax+8]
  789.  
  790. ; 332  :     return *this;
  791. ; 333  : }
  792.  
  793.   00022    5d         pop     ebp
  794.   00023    c2 04 00     ret     4
  795. ??YD3DXVECTOR3@@QAEAAU0@ABU0@@Z ENDP            ; D3DXVECTOR3::operator+=
  796. _TEXT    ENDS
  797. PUBLIC    ??_0D3DXVECTOR3@@QAEAAU0@M@Z            ; D3DXVECTOR3::operator/=
  798. ; Function compile flags: /Ogs
  799. ;    COMDAT ??_0D3DXVECTOR3@@QAEAAU0@M@Z
  800. _TEXT    SEGMENT
  801. _f$ = 8                            ; size = 4
  802. ??_0D3DXVECTOR3@@QAEAAU0@M@Z PROC NEAR            ; D3DXVECTOR3::operator/=, COMDAT
  803. ; _this$ = ecx
  804.  
  805. ; 360  :     return *this;
  806. ; 361  : }
  807.  
  808.   00000    8b ff         npad     2
  809.  
  810. ; 355  : {
  811.  
  812.   00002    55         push     ebp
  813.   00003    8b ec         mov     ebp, esp
  814.  
  815. ; 356  :     FLOAT fInv = 1.0f / f;
  816.  
  817.   00005    d9 e8         fld1
  818.   00007    8b c1         mov     eax, ecx
  819.   00009    d8 75 08     fdiv     DWORD PTR _f$[ebp]
  820.  
  821. ; 357  :     x *= fInv;
  822.  
  823.   0000c    d9 c0         fld     ST(0)
  824.   0000e    d8 08         fmul     DWORD PTR [eax]
  825.   00010    d9 18         fstp     DWORD PTR [eax]
  826.  
  827. ; 358  :     y *= fInv;
  828.  
  829.   00012    d9 c0         fld     ST(0)
  830.   00014    d8 48 04     fmul     DWORD PTR [eax+4]
  831.   00017    d9 58 04     fstp     DWORD PTR [eax+4]
  832.  
  833. ; 359  :     z *= fInv;
  834.  
  835.   0001a    d8 48 08     fmul     DWORD PTR [eax+8]
  836.   0001d    d9 58 08     fstp     DWORD PTR [eax+8]
  837.  
  838. ; 360  :     return *this;
  839. ; 361  : }
  840.  
  841.   00020    5d         pop     ebp
  842.   00021    c2 04 00     ret     4
  843. ??_0D3DXVECTOR3@@QAEAAU0@M@Z ENDP            ; D3DXVECTOR3::operator/=
  844. _TEXT    ENDS
  845. PUBLIC    ??GD3DXVECTOR3@@QBE?AU0@ABU0@@Z            ; D3DXVECTOR3::operator-
  846. ; Function compile flags: /Ogs
  847. ;    COMDAT ??GD3DXVECTOR3@@QBE?AU0@ABU0@@Z
  848. _TEXT    SEGMENT
  849. ___$ReturnUdt$ = 8                    ; size = 4
  850. _v$ = 12                        ; size = 4
  851. ??GD3DXVECTOR3@@QBE?AU0@ABU0@@Z PROC NEAR        ; D3DXVECTOR3::operator-, COMDAT
  852. ; _this$ = ecx
  853.  
  854. ; 389  : }
  855.  
  856.   00000    8b ff         npad     2
  857.  
  858. ; 387  : {
  859.  
  860.   00002    55         push     ebp
  861.   00003    8b ec         mov     ebp, esp
  862.  
  863. ; 388  :     return D3DXVECTOR3(x - v.x, y - v.y, z - v.z);
  864.  
  865.   00005    d9 41 08     fld     DWORD PTR [ecx+8]
  866.   00008    8b 45 0c     mov     eax, DWORD PTR _v$[ebp]
  867.   0000b    d8 60 08     fsub     DWORD PTR [eax+8]
  868.   0000e    d9 41 04     fld     DWORD PTR [ecx+4]
  869.   00011    d8 60 04     fsub     DWORD PTR [eax+4]
  870.   00014    d9 01         fld     DWORD PTR [ecx]
  871.   00016    d8 20         fsub     DWORD PTR [eax]
  872.   00018    8b 45 08     mov     eax, DWORD PTR ___$ReturnUdt$[ebp]
  873.   0001b    d9 18         fstp     DWORD PTR [eax]
  874.   0001d    d9 58 04     fstp     DWORD PTR [eax+4]
  875.   00020    d9 58 08     fstp     DWORD PTR [eax+8]
  876.  
  877. ; 389  : }
  878.  
  879.   00023    5d         pop     ebp
  880.   00024    c2 08 00     ret     8
  881. ??GD3DXVECTOR3@@QBE?AU0@ABU0@@Z ENDP            ; D3DXVECTOR3::operator-
  882. _TEXT    ENDS
  883. PUBLIC    ??8D3DXVECTOR3@@QBEHABU0@@Z            ; D3DXVECTOR3::operator==
  884. ; Function compile flags: /Ogs
  885. ;    COMDAT ??8D3DXVECTOR3@@QBEHABU0@@Z
  886. _TEXT    SEGMENT
  887. _v$ = 8                            ; size = 4
  888. ??8D3DXVECTOR3@@QBEHABU0@@Z PROC NEAR            ; D3DXVECTOR3::operator==, COMDAT
  889. ; _this$ = ecx
  890.  
  891. ; 416  : }
  892.  
  893.   00000    8b ff         npad     2
  894.  
  895. ; 414  : {
  896.  
  897.   00002    55         push     ebp
  898.   00003    8b ec         mov     ebp, esp
  899.  
  900. ; 415  :     return x == v.x && y == v.y && z == v.z;
  901.  
  902.   00005    8b 55 08     mov     edx, DWORD PTR _v$[ebp]
  903.   00008    d9 02         fld     DWORD PTR [edx]
  904.   0000a    d9 01         fld     DWORD PTR [ecx]
  905.   0000c    da e9         fucompp
  906.   0000e    df e0         fnstsw     ax
  907.   00010    f6 c4 44     test     ah, 68            ; 00000044H
  908.   00013    7a 23         jp     SHORT $L57077
  909.   00015    d9 42 04     fld     DWORD PTR [edx+4]
  910.   00018    d9 41 04     fld     DWORD PTR [ecx+4]
  911.   0001b    da e9         fucompp
  912.   0001d    df e0         fnstsw     ax
  913.   0001f    f6 c4 44     test     ah, 68            ; 00000044H
  914.   00022    7a 14         jp     SHORT $L57077
  915.   00024    d9 42 08     fld     DWORD PTR [edx+8]
  916.   00027    d9 41 08     fld     DWORD PTR [ecx+8]
  917.   0002a    da e9         fucompp
  918.   0002c    df e0         fnstsw     ax
  919.   0002e    f6 c4 44     test     ah, 68            ; 00000044H
  920.   00031    7a 05         jp     SHORT $L57077
  921.   00033    33 c0         xor     eax, eax
  922.   00035    40         inc     eax
  923.   00036    eb 02         jmp     SHORT $L57078
  924. $L57077:
  925.   00038    33 c0         xor     eax, eax
  926. $L57078:
  927.  
  928. ; 416  : }
  929.  
  930.   0003a    5d         pop     ebp
  931.   0003b    c2 04 00     ret     4
  932. ??8D3DXVECTOR3@@QBEHABU0@@Z ENDP            ; D3DXVECTOR3::operator==
  933. _TEXT    ENDS
  934. PUBLIC    ??9D3DXVECTOR3@@QBEHABU0@@Z            ; D3DXVECTOR3::operator!=
  935. ; Function compile flags: /Ogs
  936. ;    COMDAT ??9D3DXVECTOR3@@QBEHABU0@@Z
  937. _TEXT    SEGMENT
  938. _v$ = 8                            ; size = 4
  939. ??9D3DXVECTOR3@@QBEHABU0@@Z PROC NEAR            ; D3DXVECTOR3::operator!=, COMDAT
  940. ; _this$ = ecx
  941.  
  942. ; 422  : }
  943.  
  944.   00000    8b ff         npad     2
  945.  
  946. ; 420  : {
  947.  
  948.   00002    55         push     ebp
  949.   00003    8b ec         mov     ebp, esp
  950.  
  951. ; 421  :     return x != v.x || y != v.y || z != v.z;
  952.  
  953.   00005    8b 55 08     mov     edx, DWORD PTR _v$[ebp]
  954.   00008    d9 02         fld     DWORD PTR [edx]
  955.   0000a    d9 01         fld     DWORD PTR [ecx]
  956.   0000c    da e9         fucompp
  957.   0000e    df e0         fnstsw     ax
  958.   00010    f6 c4 44     test     ah, 68            ; 00000044H
  959.   00013    7a 22         jp     SHORT $L57080
  960.   00015    d9 42 04     fld     DWORD PTR [edx+4]
  961.   00018    d9 41 04     fld     DWORD PTR [ecx+4]
  962.   0001b    da e9         fucompp
  963.   0001d    df e0         fnstsw     ax
  964.   0001f    f6 c4 44     test     ah, 68            ; 00000044H
  965.   00022    7a 13         jp     SHORT $L57080
  966.   00024    d9 42 08     fld     DWORD PTR [edx+8]
  967.   00027    d9 41 08     fld     DWORD PTR [ecx+8]
  968.   0002a    da e9         fucompp
  969.   0002c    df e0         fnstsw     ax
  970.   0002e    f6 c4 44     test     ah, 68            ; 00000044H
  971.   00031    7a 04         jp     SHORT $L57080
  972.   00033    33 c0         xor     eax, eax
  973.   00035    eb 03         jmp     SHORT $L57081
  974. $L57080:
  975.   00037    33 c0         xor     eax, eax
  976.   00039    40         inc     eax
  977. $L57081:
  978.  
  979. ; 422  : }
  980.  
  981.   0003a    5d         pop     ebp
  982.   0003b    c2 04 00     ret     4
  983. ??9D3DXVECTOR3@@QBEHABU0@@Z ENDP            ; D3DXVECTOR3::operator!=
  984. _TEXT    ENDS
  985. PUBLIC    ?CreateMaterialBuffer@GXU@@YAJPAU_D3DXMATERIAL@@KPAPAUID3DXBuffer@@@Z ; GXU::CreateMaterialBuffer
  986. EXTRN    _D3DXCreateBuffer@8:NEAR
  987. ; Function compile flags: /Ogs
  988. ; File d:\builds\nt32_fre\multimedia\directx\dxsdk\src\mview\gxu\loadutil.cpp
  989. ;    COMDAT ?CreateMaterialBuffer@GXU@@YAJPAU_D3DXMATERIAL@@KPAPAUID3DXBuffer@@@Z
  990. _TEXT    SEGMENT
  991. _hr$ = -20                        ; size = 4
  992. tv318 = -16                        ; size = 4
  993. _rgmatOut$ = -12                    ; size = 4
  994. tv88 = -8                        ; size = 4
  995. _iCurOffset$ = -8                    ; size = 4
  996. _pbufMaterialsOut$ = -4                    ; size = 4
  997. _rgmat$ = 8                        ; size = 4
  998. tv156 = 12                        ; size = 4
  999. _cmat$ = 12                        ; size = 4
  1000. _ppbufMaterials$ = 16                    ; size = 4
  1001. ?CreateMaterialBuffer@GXU@@YAJPAU_D3DXMATERIAL@@KPAPAUID3DXBuffer@@@Z PROC NEAR ; GXU::CreateMaterialBuffer, COMDAT
  1002.  
  1003. ; 1011 : }
  1004.  
  1005.   00000    8b ff         npad     2
  1006.  
  1007. ; 960  : {
  1008.  
  1009.   00002    55         push     ebp
  1010.   00003    8b ec         mov     ebp, esp
  1011.   00005    83 ec 14     sub     esp, 20            ; 00000014H
  1012.   00008    53         push     ebx
  1013.   00009    56         push     esi
  1014.  
  1015. ; 961  :     HRESULT hr = S_OK;
  1016. ; 962  :     DWORD cbTotalStringSize;
  1017. ; 963  :     DWORD iCurOffset;
  1018. ; 964  :     DWORD imat;
  1019. ; 965  :     LPD3DXBUFFER pbufMaterialsOut = NULL;
  1020. ; 966  :     LPD3DXMATERIAL rgmatOut;
  1021. ; 967  :     DWORD cbName;
  1022. ; 968  : 
  1023. ; 969  :     // first calculate the amount of memory needed for the string buffers
  1024. ; 970  :     cbTotalStringSize = 0;
  1025. ; 971  :     for (imat = 0; imat < cmat; imat++)
  1026.  
  1027.   0000a    8b 75 0c     mov     esi, DWORD PTR _cmat$[ebp]
  1028.   0000d    33 c9         xor     ecx, ecx
  1029.   0000f    3b f1         cmp     esi, ecx
  1030.   00011    57         push     edi
  1031.   00012    89 4d fc     mov     DWORD PTR _pbufMaterialsOut$[ebp], ecx
  1032.   00015    76 27         jbe     SHORT $L57090
  1033.   00017    8b 7d 08     mov     edi, DWORD PTR _rgmat$[ebp]
  1034.   0001a    83 c7 44     add     edi, 68            ; 00000044H
  1035.   0001d    89 75 f8     mov     DWORD PTR tv88[ebp], esi
  1036. $L57092:
  1037.  
  1038. ; 972  :     {
  1039. ; 973  :         if (rgmat[imat].pTextureFilename != NULL)
  1040.  
  1041.   00020    8b 07         mov     eax, DWORD PTR [edi]
  1042.   00022    85 c0         test     eax, eax
  1043.   00024    74 10         je     SHORT $L56882
  1044.  
  1045. ; 974  :         {
  1046. ; 975  :             cbTotalStringSize += strlen(rgmat[imat].pTextureFilename) + 1;
  1047.  
  1048.   00026    8d 58 01     lea     ebx, DWORD PTR [eax+1]
  1049. $L57087:
  1050.   00029    8a 10         mov     dl, BYTE PTR [eax]
  1051.   0002b    40         inc     eax
  1052.   0002c    84 d2         test     dl, dl
  1053.   0002e    75 f9         jne     SHORT $L57087
  1054.   00030    2b c3         sub     eax, ebx
  1055.   00032    8d 4c 01 01     lea     ecx, DWORD PTR [ecx+eax+1]
  1056. $L56882:
  1057.   00036    83 c7 48     add     edi, 72            ; 00000048H
  1058.   00039    ff 4d f8     dec     DWORD PTR tv88[ebp]
  1059.   0003c    75 e2         jne     SHORT $L57092
  1060. $L57090:
  1061.  
  1062. ; 976  :         }
  1063. ; 977  :     }
  1064. ; 978  : 
  1065. ; 979  :     hr = D3DXCreateBuffer(sizeof(D3DXMATERIAL) * cmat + cbTotalStringSize, &pbufMaterialsOut);
  1066.  
  1067.   0003e    8d 1c f6     lea     ebx, DWORD PTR [esi+esi*8]
  1068.   00041    8d 45 fc     lea     eax, DWORD PTR _pbufMaterialsOut$[ebp]
  1069.   00044    50         push     eax
  1070.   00045    c1 e3 03     shl     ebx, 3
  1071.   00048    8d 04 0b     lea     eax, DWORD PTR [ebx+ecx]
  1072.   0004b    50         push     eax
  1073.   0004c    e8 00 00 00 00     call     _D3DXCreateBuffer@8
  1074.  
  1075. ; 980  :     if (FAILED(hr))
  1076.  
  1077.   00051    85 c0         test     eax, eax
  1078.   00053    89 45 ec     mov     DWORD PTR _hr$[ebp], eax
  1079.   00056    0f 8c 8a 00 00
  1080.     00         jl     $e_Exit$56888
  1081.  
  1082. ; 981  :         goto e_Exit;
  1083. ; 982  : 
  1084. ; 983  :     rgmatOut = (LPD3DXMATERIAL)pbufMaterialsOut->GetBufferPointer();
  1085.  
  1086.   0005c    8b 45 fc     mov     eax, DWORD PTR _pbufMaterialsOut$[ebp]
  1087.   0005f    8b 08         mov     ecx, DWORD PTR [eax]
  1088.   00061    50         push     eax
  1089.   00062    ff 51 0c     call     DWORD PTR [ecx+12]
  1090.  
  1091. ; 984  : 
  1092. ; 985  :     // fist copy the materials info into the new array (note: string pointers are now incorrect)
  1093. ; 986  :     memcpy(rgmatOut, rgmat, sizeof(D3DXMATERIAL) * cmat);
  1094.  
  1095.   00065    8b 75 08     mov     esi, DWORD PTR _rgmat$[ebp]
  1096.   00068    8b f8         mov     edi, eax
  1097.   0006a    8b cb         mov     ecx, ebx
  1098.   0006c    8b c1         mov     eax, ecx
  1099.   0006e    c1 e9 02     shr     ecx, 2
  1100.   00071    89 7d f4     mov     DWORD PTR _rgmatOut$[ebp], edi
  1101.   00074    f3 a5         rep movsd
  1102.   00076    8b c8         mov     ecx, eax
  1103.   00078    83 e1 03     and     ecx, 3
  1104.   0007b    f3 a4         rep movsb
  1105.  
  1106. ; 987  : 
  1107. ; 988  :     // start allocating strings just after the last material
  1108. ; 989  :     iCurOffset = sizeof(D3DXMATERIAL) * cmat;
  1109. ; 990  :     for (imat = 0; imat < cmat; imat++)
  1110.  
  1111.   0007d    8b 75 0c     mov     esi, DWORD PTR _cmat$[ebp]
  1112.   00080    85 f6         test     esi, esi
  1113.   00082    89 5d f8     mov     DWORD PTR _iCurOffset$[ebp], ebx
  1114.   00085    76 53         jbe     SHORT $L56895
  1115.   00087    8b 45 08     mov     eax, DWORD PTR _rgmat$[ebp]
  1116.   0008a    8b 4d f4     mov     ecx, DWORD PTR _rgmatOut$[ebp]
  1117.   0008d    2b c8         sub     ecx, eax
  1118.   0008f    8d 50 44     lea     edx, DWORD PTR [eax+68]
  1119.   00092    89 4d f0     mov     DWORD PTR tv318[ebp], ecx
  1120.   00095    89 75 0c     mov     DWORD PTR tv156[ebp], esi
  1121. $L57091:
  1122.  
  1123. ; 991  :     {
  1124. ; 992  :         if (rgmat[imat].pTextureFilename != NULL)
  1125.  
  1126.   00098    83 3a 00     cmp     DWORD PTR [edx], 0
  1127.   0009b    74 35         je     SHORT $L56894
  1128.  
  1129. ; 993  :         {
  1130. ; 994  :             rgmatOut[imat].pTextureFilename = ((char*)rgmatOut) + iCurOffset;
  1131.  
  1132.   0009d    8b 45 f8     mov     eax, DWORD PTR _iCurOffset$[ebp]
  1133.   000a0    8b 4d f4     mov     ecx, DWORD PTR _rgmatOut$[ebp]
  1134.   000a3    8d 3c 08     lea     edi, DWORD PTR [eax+ecx]
  1135.   000a6    8b 45 f0     mov     eax, DWORD PTR tv318[ebp]
  1136.   000a9    89 3c 10     mov     DWORD PTR [eax+edx], edi
  1137.  
  1138. ; 995  : 
  1139. ; 996  :             cbName = strlen(rgmat[imat].pTextureFilename) + 1;
  1140.  
  1141.   000ac    8b 32         mov     esi, DWORD PTR [edx]
  1142.   000ae    8b ce         mov     ecx, esi
  1143.   000b0    8d 41 01     lea     eax, DWORD PTR [ecx+1]
  1144. $L57088:
  1145.   000b3    8a 19         mov     bl, BYTE PTR [ecx]
  1146.   000b5    41         inc     ecx
  1147.   000b6    84 db         test     bl, bl
  1148.   000b8    75 f9         jne     SHORT $L57088
  1149.   000ba    2b c8         sub     ecx, eax
  1150.   000bc    8d 59 01     lea     ebx, DWORD PTR [ecx+1]
  1151.  
  1152. ; 997  :             memcpy(rgmatOut[imat].pTextureFilename, rgmat[imat].pTextureFilename, cbName);
  1153.  
  1154.   000bf    8b cb         mov     ecx, ebx
  1155.   000c1    8b c1         mov     eax, ecx
  1156.   000c3    c1 e9 02     shr     ecx, 2
  1157.   000c6    f3 a5         rep movsd
  1158.   000c8    8b c8         mov     ecx, eax
  1159.   000ca    83 e1 03     and     ecx, 3
  1160.  
  1161. ; 998  : 
  1162. ; 999  :             iCurOffset += cbName;
  1163.  
  1164.   000cd    01 5d f8     add     DWORD PTR _iCurOffset$[ebp], ebx
  1165.   000d0    f3 a4         rep movsb
  1166. $L56894:
  1167.   000d2    83 c2 48     add     edx, 72            ; 00000048H
  1168.   000d5    ff 4d 0c     dec     DWORD PTR tv156[ebp]
  1169.   000d8    75 be         jne     SHORT $L57091
  1170. $L56895:
  1171.  
  1172. ; 1000 :         }
  1173. ; 1001 :     }
  1174. ; 1002 : 
  1175. ; 1003 :     GXASSERT(iCurOffset == sizeof(D3DXMATERIAL) * cmat + cbTotalStringSize);
  1176. ; 1004 : 
  1177. ; 1005 :     *ppbufMaterials = pbufMaterialsOut;
  1178.  
  1179.   000da    8b 45 fc     mov     eax, DWORD PTR _pbufMaterialsOut$[ebp]
  1180.   000dd    8b 4d 10     mov     ecx, DWORD PTR _ppbufMaterials$[ebp]
  1181.  
  1182. ; 1006 :     pbufMaterialsOut = NULL;
  1183.  
  1184.   000e0    83 65 fc 00     and     DWORD PTR _pbufMaterialsOut$[ebp], 0
  1185.   000e4    89 01         mov     DWORD PTR [ecx], eax
  1186. $e_Exit$56888:
  1187.  
  1188. ; 1007 : 
  1189. ; 1008 : e_Exit:
  1190. ; 1009 :     GXRELEASE(pbufMaterialsOut);
  1191.  
  1192.   000e6    8b 45 fc     mov     eax, DWORD PTR _pbufMaterialsOut$[ebp]
  1193.   000e9    85 c0         test     eax, eax
  1194.   000eb    5f         pop     edi
  1195.   000ec    5e         pop     esi
  1196.   000ed    5b         pop     ebx
  1197.   000ee    74 06         je     SHORT $L56900
  1198.   000f0    8b 08         mov     ecx, DWORD PTR [eax]
  1199.   000f2    50         push     eax
  1200.   000f3    ff 51 08     call     DWORD PTR [ecx+8]
  1201. $L56900:
  1202.  
  1203. ; 1010 :     return hr;
  1204.  
  1205.   000f6    8b 45 ec     mov     eax, DWORD PTR _hr$[ebp]
  1206.  
  1207. ; 1011 : }
  1208.  
  1209.   000f9    c9         leave
  1210.   000fa    c3         ret     0
  1211. ?CreateMaterialBuffer@GXU@@YAJPAU_D3DXMATERIAL@@KPAPAUID3DXBuffer@@@Z ENDP ; GXU::CreateMaterialBuffer
  1212. _TEXT    ENDS
  1213. PUBLIC    ?MergeMaterialBuffers@GXU@@YAJPAUID3DXBuffer@@K0KPAPAU2@@Z ; GXU::MergeMaterialBuffers
  1214. EXTRN    ??2@YAPAXI@Z:NEAR                ; operator new
  1215. EXTRN    ??3@YAXPAX@Z:NEAR                ; operator delete
  1216. ; Function compile flags: /Ogs
  1217. ;    COMDAT ?MergeMaterialBuffers@GXU@@YAJPAUID3DXBuffer@@K0KPAPAU2@@Z
  1218. _TEXT    SEGMENT
  1219. _rgmatTemp$ = -4                    ; size = 4
  1220. _rgmat2$ = 8                        ; size = 4
  1221. _pbufMat1$ = 8                        ; size = 4
  1222. _cmat1$ = 12                        ; size = 4
  1223. _pbufMat2$ = 16                        ; size = 4
  1224. _cmat2$ = 20                        ; size = 4
  1225. _ppbufMaterials$ = 24                    ; size = 4
  1226. ?MergeMaterialBuffers@GXU@@YAJPAUID3DXBuffer@@K0KPAPAU2@@Z PROC NEAR ; GXU::MergeMaterialBuffers, COMDAT
  1227.  
  1228. ; 1064 : 
  1229. ; 1065 : }
  1230.  
  1231.   00000    8b ff         npad     2
  1232.  
  1233. ; 1015 : {
  1234.  
  1235.   00002    55         push     ebp
  1236.   00003    8b ec         mov     ebp, esp
  1237.   00005    51         push     ecx
  1238.  
  1239. ; 1016 :     HRESULT hr = S_OK;
  1240. ; 1017 :     D3DXMATERIAL *rgmatTemp = NULL;
  1241. ; 1018 :     D3DXMATERIAL *rgmat1;
  1242. ; 1019 :     D3DXMATERIAL *rgmat2;
  1243. ; 1020 : 
  1244. ; 1021 :     if (pbufMat1 == NULL)
  1245.  
  1246.   00006    8b 45 08     mov     eax, DWORD PTR _pbufMat1$[ebp]
  1247.   00009    56         push     esi
  1248.   0000a    33 f6         xor     esi, esi
  1249.   0000c    3b c6         cmp     eax, esi
  1250.   0000e    89 75 fc     mov     DWORD PTR _rgmatTemp$[ebp], esi
  1251.   00011    75 21         jne     SHORT $L56915
  1252.  
  1253. ; 1022 :     {
  1254. ; 1023 :         if (pbufMat2 == NULL)
  1255.  
  1256.   00013    8b 45 10     mov     eax, DWORD PTR _pbufMat2$[ebp]
  1257.   00016    3b c6         cmp     eax, esi
  1258.   00018    75 0a         jne     SHORT $L56916
  1259.  
  1260. ; 1024 :         {
  1261. ; 1025 :             *ppbufMaterials = NULL;
  1262.  
  1263.   0001a    8b 45 18     mov     eax, DWORD PTR _ppbufMaterials$[ebp]
  1264.   0001d    89 30         mov     DWORD PTR [eax], esi
  1265.  
  1266. ; 1026 :         }
  1267. ; 1027 :         else
  1268.  
  1269.   0001f    e9 a5 00 00 00     jmp     $e_Exit$56927
  1270. $L56916:
  1271.  
  1272. ; 1028 :         {
  1273. ; 1029 :             *ppbufMaterials = pbufMat2;
  1274.  
  1275.   00024    8b 4d 18     mov     ecx, DWORD PTR _ppbufMaterials$[ebp]
  1276.   00027    89 01         mov     DWORD PTR [ecx], eax
  1277.  
  1278. ; 1030 :             pbufMat2->AddRef();
  1279.  
  1280.   00029    8b 08         mov     ecx, DWORD PTR [eax]
  1281.   0002b    50         push     eax
  1282.   0002c    ff 51 04     call     DWORD PTR [ecx+4]
  1283.  
  1284. ; 1031 :         }
  1285. ; 1032 :     }
  1286. ; 1033 :     else if (pbufMat2 == NULL)
  1287.  
  1288.   0002f    e9 95 00 00 00     jmp     $e_Exit$56927
  1289. $L56915:
  1290.   00034    57         push     edi
  1291.   00035    8b 7d 10     mov     edi, DWORD PTR _pbufMat2$[ebp]
  1292.   00038    3b fe         cmp     edi, esi
  1293.   0003a    75 0d         jne     SHORT $L56919
  1294.  
  1295. ; 1034 :     {
  1296. ; 1035 :         *ppbufMaterials = pbufMat1;
  1297.  
  1298.   0003c    8b 4d 18     mov     ecx, DWORD PTR _ppbufMaterials$[ebp]
  1299.   0003f    89 01         mov     DWORD PTR [ecx], eax
  1300.  
  1301. ; 1036 :         pbufMat1->AddRef();
  1302.  
  1303.   00041    8b 08         mov     ecx, DWORD PTR [eax]
  1304.   00043    50         push     eax
  1305.   00044    ff 51 04     call     DWORD PTR [ecx+4]
  1306.  
  1307. ; 1037 :     }
  1308. ; 1038 :     else  // both have materials
  1309.  
  1310.   00047    eb 7f         jmp     SHORT $L57096
  1311. $L56919:
  1312.  
  1313. ; 1039 :     {
  1314. ; 1040 :         rgmat1 = (LPD3DXMATERIAL)pbufMat1->GetBufferPointer();
  1315.  
  1316.   00049    8b 08         mov     ecx, DWORD PTR [eax]
  1317.   0004b    53         push     ebx
  1318.   0004c    50         push     eax
  1319.   0004d    ff 51 0c     call     DWORD PTR [ecx+12]
  1320.   00050    8b f0         mov     esi, eax
  1321.  
  1322. ; 1041 :         rgmat2 = (LPD3DXMATERIAL)pbufMat2->GetBufferPointer();
  1323.  
  1324.   00052    8b 07         mov     eax, DWORD PTR [edi]
  1325.   00054    57         push     edi
  1326.   00055    ff 50 0c     call     DWORD PTR [eax+12]
  1327.  
  1328. ; 1042 : 
  1329. ; 1043 :         // make an array contains the color info and pointers to the original strings
  1330. ; 1044 :         //   that is the two arrays combined
  1331. ; 1045 :         rgmatTemp = new D3DXMATERIAL[cmat1 + cmat2];
  1332.  
  1333.   00058    8b 7d 0c     mov     edi, DWORD PTR _cmat1$[ebp]
  1334.   0005b    89 45 08     mov     DWORD PTR _rgmat2$[ebp], eax
  1335.   0005e    8b 45 14     mov     eax, DWORD PTR _cmat2$[ebp]
  1336.   00061    8d 1c 07     lea     ebx, DWORD PTR [edi+eax]
  1337.   00064    8d 04 db     lea     eax, DWORD PTR [ebx+ebx*8]
  1338.   00067    c1 e0 03     shl     eax, 3
  1339.   0006a    50         push     eax
  1340.   0006b    e8 00 00 00 00     call     ??2@YAPAXI@Z        ; operator new
  1341.  
  1342. ; 1046 :         if (rgmatTemp == NULL)
  1343.  
  1344.   00070    85 c0         test     eax, eax
  1345.   00072    59         pop     ecx
  1346.   00073    89 45 fc     mov     DWORD PTR _rgmatTemp$[ebp], eax
  1347.   00076    75 07         jne     SHORT $L56925
  1348.  
  1349. ; 1047 :         {
  1350. ; 1048 :             hr = E_OUTOFMEMORY;
  1351.  
  1352.   00078    be 0e 00 07 80     mov     esi, -2147024882    ; 8007000eH
  1353.  
  1354. ; 1049 :             goto e_Exit;
  1355.  
  1356.   0007d    eb 48         jmp     SHORT $L57097
  1357. $L56925:
  1358.  
  1359. ; 1050 :         }
  1360. ; 1051 : 
  1361. ; 1052 :         memcpy(rgmatTemp, rgmat1, sizeof(D3DXMATERIAL) * cmat1);
  1362.  
  1363.   0007f    8d 04 ff     lea     eax, DWORD PTR [edi+edi*8]
  1364.   00082    8b 7d fc     mov     edi, DWORD PTR _rgmatTemp$[ebp]
  1365.   00085    c1 e0 03     shl     eax, 3
  1366.   00088    8b c8         mov     ecx, eax
  1367.   0008a    8b d1         mov     edx, ecx
  1368.   0008c    c1 e9 02     shr     ecx, 2
  1369.   0008f    f3 a5         rep movsd
  1370.  
  1371. ; 1053 :         memcpy(rgmatTemp + cmat1, rgmat2, sizeof(D3DXMATERIAL) * cmat2);
  1372. ; 1054 : 
  1373. ; 1055 :         // then use the CreateMaterialBuffer call to take and make a buffer out of the "merged" array
  1374. ; 1056 :         hr = CreateMaterialBuffer(rgmatTemp, cmat1 + cmat2, ppbufMaterials);
  1375.  
  1376.   00091    ff 75 18     push     DWORD PTR _ppbufMaterials$[ebp]
  1377.   00094    8b ca         mov     ecx, edx
  1378.   00096    8b 55 fc     mov     edx, DWORD PTR _rgmatTemp$[ebp]
  1379.   00099    83 e1 03     and     ecx, 3
  1380.   0009c    f3 a4         rep movsb
  1381.   0009e    8b 4d 14     mov     ecx, DWORD PTR _cmat2$[ebp]
  1382.   000a1    8b 75 08     mov     esi, DWORD PTR _rgmat2$[ebp]
  1383.   000a4    8d 0c c9     lea     ecx, DWORD PTR [ecx+ecx*8]
  1384.   000a7    c1 e1 03     shl     ecx, 3
  1385.   000aa    8d 3c 10     lea     edi, DWORD PTR [eax+edx]
  1386.   000ad    8b c1         mov     eax, ecx
  1387.   000af    c1 e9 02     shr     ecx, 2
  1388.   000b2    f3 a5         rep movsd
  1389.   000b4    8b c8         mov     ecx, eax
  1390.   000b6    83 e1 03     and     ecx, 3
  1391.   000b9    53         push     ebx
  1392.   000ba    52         push     edx
  1393.   000bb    f3 a4         rep movsb
  1394.   000bd    e8 00 00 00 00     call     ?CreateMaterialBuffer@GXU@@YAJPAU_D3DXMATERIAL@@KPAPAUID3DXBuffer@@@Z ; GXU::CreateMaterialBuffer
  1395.   000c2    83 c4 0c     add     esp, 12            ; 0000000cH
  1396.   000c5    8b f0         mov     esi, eax
  1397. $L57097:
  1398.   000c7    5b         pop     ebx
  1399. $L57096:
  1400.   000c8    5f         pop     edi
  1401. $e_Exit$56927:
  1402.  
  1403. ; 1057 :         if (FAILED(hr))
  1404. ; 1058 :             goto e_Exit;
  1405. ; 1059 :     }
  1406. ; 1060 : 
  1407. ; 1061 : e_Exit:
  1408. ; 1062 :     delete []rgmatTemp;
  1409.  
  1410.   000c9    ff 75 fc     push     DWORD PTR _rgmatTemp$[ebp]
  1411.   000cc    e8 00 00 00 00     call     ??3@YAXPAX@Z        ; operator delete
  1412.   000d1    59         pop     ecx
  1413.  
  1414. ; 1063 :     return hr;
  1415.  
  1416.   000d2    8b c6         mov     eax, esi
  1417.   000d4    5e         pop     esi
  1418.  
  1419. ; 1064 : 
  1420. ; 1065 : }
  1421.  
  1422.   000d5    c9         leave
  1423.   000d6    c3         ret     0
  1424. ?MergeMaterialBuffers@GXU@@YAJPAUID3DXBuffer@@K0KPAPAU2@@Z ENDP ; GXU::MergeMaterialBuffers
  1425. _TEXT    ENDS
  1426. PUBLIC    ??_H@YGXPAXIHP6EPAX0@Z@Z            ; `vector constructor iterator'
  1427. ; Function compile flags: /Ogs
  1428. ;    COMDAT ??_H@YGXPAXIHP6EPAX0@Z@Z
  1429. _TEXT    SEGMENT
  1430. ___t$ = 8                        ; size = 4
  1431. ___s$ = 12                        ; size = 4
  1432. ___n$ = 16                        ; size = 4
  1433. ___f$ = 20                        ; size = 4
  1434. ??_H@YGXPAXIHP6EPAX0@Z@Z PROC NEAR            ; `vector constructor iterator', COMDAT
  1435.   00000    8b ff         npad     2
  1436.   00002    55         push     ebp
  1437.   00003    8b ec         mov     ebp, esp
  1438.   00005    8b 45 10     mov     eax, DWORD PTR ___n$[ebp]
  1439.   00008    48         dec     eax
  1440.   00009    78 15         js     SHORT $L56944
  1441.   0000b    56         push     esi
  1442.   0000c    8b 75 08     mov     esi, DWORD PTR ___t$[ebp]
  1443.   0000f    57         push     edi
  1444.   00010    8d 78 01     lea     edi, DWORD PTR [eax+1]
  1445. $L56943:
  1446.   00013    8b ce         mov     ecx, esi
  1447.   00015    ff 55 14     call     DWORD PTR ___f$[ebp]
  1448.   00018    03 75 0c     add     esi, DWORD PTR ___s$[ebp]
  1449.   0001b    4f         dec     edi
  1450.   0001c    75 f5         jne     SHORT $L56943
  1451.   0001e    5f         pop     edi
  1452.   0001f    5e         pop     esi
  1453. $L56944:
  1454.   00020    5d         pop     ebp
  1455.   00021    c2 10 00     ret     16            ; 00000010H
  1456. ??_H@YGXPAXIHP6EPAX0@Z@Z ENDP                ; `vector constructor iterator'
  1457. _TEXT    ENDS
  1458. PUBLIC    ??0D3DXCOLOR@@QAE@MMMM@Z            ; D3DXCOLOR::D3DXCOLOR
  1459. ; Function compile flags: /Ogs
  1460. ; File d:\builds\nt32_fre\public\sdk\inc\d3dx9math.inl
  1461. ;    COMDAT ??0D3DXCOLOR@@QAE@MMMM@Z
  1462. _TEXT    SEGMENT
  1463. _fr$ = 8                        ; size = 4
  1464. _fg$ = 12                        ; size = 4
  1465. _fb$ = 16                        ; size = 4
  1466. _fa$ = 20                        ; size = 4
  1467. ??0D3DXCOLOR@@QAE@MMMM@Z PROC NEAR            ; D3DXCOLOR::D3DXCOLOR, COMDAT
  1468. ; _this$ = ecx
  1469.  
  1470. ; 1395 : }
  1471.  
  1472.   00000    8b ff         npad     2
  1473.  
  1474. ; 1390 : {
  1475.  
  1476.   00002    55         push     ebp
  1477.   00003    8b ec         mov     ebp, esp
  1478.   00005    8b c1         mov     eax, ecx
  1479.  
  1480. ; 1391 :     r = fr;
  1481.  
  1482.   00007    8b 4d 08     mov     ecx, DWORD PTR _fr$[ebp]
  1483.   0000a    89 08         mov     DWORD PTR [eax], ecx
  1484.  
  1485. ; 1392 :     g = fg;
  1486.  
  1487.   0000c    8b 4d 0c     mov     ecx, DWORD PTR _fg$[ebp]
  1488.   0000f    89 48 04     mov     DWORD PTR [eax+4], ecx
  1489.  
  1490. ; 1393 :     b = fb;
  1491.  
  1492.   00012    8b 4d 10     mov     ecx, DWORD PTR _fb$[ebp]
  1493.   00015    89 48 08     mov     DWORD PTR [eax+8], ecx
  1494.  
  1495. ; 1394 :     a = fa;
  1496.  
  1497.   00018    8b 4d 14     mov     ecx, DWORD PTR _fa$[ebp]
  1498.   0001b    89 48 0c     mov     DWORD PTR [eax+12], ecx
  1499.  
  1500. ; 1395 : }
  1501.  
  1502.   0001e    5d         pop     ebp
  1503.   0001f    c2 10 00     ret     16            ; 00000010H
  1504. ??0D3DXCOLOR@@QAE@MMMM@Z ENDP                ; D3DXCOLOR::D3DXCOLOR
  1505. _TEXT    ENDS
  1506. PUBLIC    ??8D3DXCOLOR@@QBEHABU0@@Z            ; D3DXCOLOR::operator==
  1507. ; Function compile flags: /Ogs
  1508. ;    COMDAT ??8D3DXCOLOR@@QBEHABU0@@Z
  1509. _TEXT    SEGMENT
  1510. _c$ = 8                            ; size = 4
  1511. ??8D3DXCOLOR@@QBEHABU0@@Z PROC NEAR            ; D3DXCOLOR::operator==, COMDAT
  1512. ; _this$ = ecx
  1513.  
  1514. ; 1545 : }
  1515.  
  1516.   00000    8b ff         npad     2
  1517.  
  1518. ; 1543 : {
  1519.  
  1520.   00002    55         push     ebp
  1521.   00003    8b ec         mov     ebp, esp
  1522.  
  1523. ; 1544 :     return r == c.r && g == c.g && b == c.b && a == c.a;
  1524.  
  1525.   00005    8b 55 08     mov     edx, DWORD PTR _c$[ebp]
  1526.   00008    d9 02         fld     DWORD PTR [edx]
  1527.   0000a    d9 01         fld     DWORD PTR [ecx]
  1528.   0000c    da e9         fucompp
  1529.   0000e    df e0         fnstsw     ax
  1530.   00010    f6 c4 44     test     ah, 68            ; 00000044H
  1531.   00013    7a 32         jp     SHORT $L57103
  1532.   00015    d9 42 04     fld     DWORD PTR [edx+4]
  1533.   00018    d9 41 04     fld     DWORD PTR [ecx+4]
  1534.   0001b    da e9         fucompp
  1535.   0001d    df e0         fnstsw     ax
  1536.   0001f    f6 c4 44     test     ah, 68            ; 00000044H
  1537.   00022    7a 23         jp     SHORT $L57103
  1538.   00024    d9 42 08     fld     DWORD PTR [edx+8]
  1539.   00027    d9 41 08     fld     DWORD PTR [ecx+8]
  1540.   0002a    da e9         fucompp
  1541.   0002c    df e0         fnstsw     ax
  1542.   0002e    f6 c4 44     test     ah, 68            ; 00000044H
  1543.   00031    7a 14         jp     SHORT $L57103
  1544.   00033    d9 42 0c     fld     DWORD PTR [edx+12]
  1545.   00036    d9 41 0c     fld     DWORD PTR [ecx+12]
  1546.   00039    da e9         fucompp
  1547.   0003b    df e0         fnstsw     ax
  1548.   0003d    f6 c4 44     test     ah, 68            ; 00000044H
  1549.   00040    7a 05         jp     SHORT $L57103
  1550.   00042    33 c0         xor     eax, eax
  1551.   00044    40         inc     eax
  1552.   00045    eb 02         jmp     SHORT $L57104
  1553. $L57103:
  1554.   00047    33 c0         xor     eax, eax
  1555. $L57104:
  1556.  
  1557. ; 1545 : }
  1558.  
  1559.   00049    5d         pop     ebp
  1560.   0004a    c2 04 00     ret     4
  1561. ??8D3DXCOLOR@@QBEHABU0@@Z ENDP                ; D3DXCOLOR::operator==
  1562. _TEXT    ENDS
  1563. PUBLIC    ??9D3DXCOLOR@@QBEHABU0@@Z            ; D3DXCOLOR::operator!=
  1564. ; Function compile flags: /Ogs
  1565. ;    COMDAT ??9D3DXCOLOR@@QBEHABU0@@Z
  1566. _TEXT    SEGMENT
  1567. _c$ = 8                            ; size = 4
  1568. ??9D3DXCOLOR@@QBEHABU0@@Z PROC NEAR            ; D3DXCOLOR::operator!=, COMDAT
  1569. ; _this$ = ecx
  1570.  
  1571. ; 1551 : }
  1572.  
  1573.   00000    8b ff         npad     2
  1574.  
  1575. ; 1549 : {
  1576.  
  1577.   00002    55         push     ebp
  1578.   00003    8b ec         mov     ebp, esp
  1579.  
  1580. ; 1550 :     return r != c.r || g != c.g || b != c.b || a != c.a;
  1581.  
  1582.   00005    8b 55 08     mov     edx, DWORD PTR _c$[ebp]
  1583.   00008    d9 02         fld     DWORD PTR [edx]
  1584.   0000a    d9 01         fld     DWORD PTR [ecx]
  1585.   0000c    da e9         fucompp
  1586.   0000e    df e0         fnstsw     ax
  1587.   00010    f6 c4 44     test     ah, 68            ; 00000044H
  1588.   00013    7a 31         jp     SHORT $L57106
  1589.   00015    d9 42 04     fld     DWORD PTR [edx+4]
  1590.   00018    d9 41 04     fld     DWORD PTR [ecx+4]
  1591.   0001b    da e9         fucompp
  1592.   0001d    df e0         fnstsw     ax
  1593.   0001f    f6 c4 44     test     ah, 68            ; 00000044H
  1594.   00022    7a 22         jp     SHORT $L57106
  1595.   00024    d9 42 08     fld     DWORD PTR [edx+8]
  1596.   00027    d9 41 08     fld     DWORD PTR [ecx+8]
  1597.   0002a    da e9         fucompp
  1598.   0002c    df e0         fnstsw     ax
  1599.   0002e    f6 c4 44     test     ah, 68            ; 00000044H
  1600.   00031    7a 13         jp     SHORT $L57106
  1601.   00033    d9 42 0c     fld     DWORD PTR [edx+12]
  1602.   00036    d9 41 0c     fld     DWORD PTR [ecx+12]
  1603.   00039    da e9         fucompp
  1604.   0003b    df e0         fnstsw     ax
  1605.   0003d    f6 c4 44     test     ah, 68            ; 00000044H
  1606.   00040    7a 04         jp     SHORT $L57106
  1607.   00042    33 c0         xor     eax, eax
  1608.   00044    eb 03         jmp     SHORT $L57107
  1609. $L57106:
  1610.   00046    33 c0         xor     eax, eax
  1611.   00048    40         inc     eax
  1612. $L57107:
  1613.  
  1614. ; 1551 : }
  1615.  
  1616.   00049    5d         pop     ebp
  1617.   0004a    c2 04 00     ret     4
  1618. ??9D3DXCOLOR@@QBEHABU0@@Z ENDP                ; D3DXCOLOR::operator!=
  1619. _TEXT    ENDS
  1620. PUBLIC    ?D3DXVec3Length@@YAMPBUD3DXVECTOR3@@@Z        ; D3DXVec3Length
  1621. ; Function compile flags: /Ogs
  1622. ;    COMDAT ?D3DXVec3Length@@YAMPBUD3DXVECTOR3@@@Z
  1623. _TEXT    SEGMENT
  1624. _pV$ = 8                        ; size = 4
  1625. ?D3DXVec3Length@@YAMPBUD3DXVECTOR3@@@Z PROC NEAR    ; D3DXVec3Length, COMDAT
  1626.  
  1627. ; 1711 : #else
  1628. ; 1712 :     return (FLOAT) sqrt(pV->x * pV->x + pV->y * pV->y + pV->z * pV->z);
  1629. ; 1713 : #endif
  1630. ; 1714 : }
  1631.  
  1632.   00000    8b ff         npad     2
  1633.  
  1634. ; 1703 : {
  1635.  
  1636.   00002    55         push     ebp
  1637.   00003    8b ec         mov     ebp, esp
  1638.  
  1639. ; 1704 : #ifdef D3DX_DEBUG
  1640. ; 1705 :     if(!pV)
  1641. ; 1706 :         return 0.0f;
  1642. ; 1707 : #endif
  1643. ; 1708 : 
  1644. ; 1709 : #ifdef __cplusplus
  1645. ; 1710 :     return sqrtf(pV->x * pV->x + pV->y * pV->y + pV->z * pV->z);
  1646.  
  1647.   00005    8b 45 08     mov     eax, DWORD PTR _pV$[ebp]
  1648.   00008    d9 40 08     fld     DWORD PTR [eax+8]
  1649.   0000b    d9 40 04     fld     DWORD PTR [eax+4]
  1650.   0000e    d9 00         fld     DWORD PTR [eax]
  1651.   00010    d9 c0         fld     ST(0)
  1652.   00012    d8 c9         fmul     ST(0), ST(1)
  1653.   00014    d9 c2         fld     ST(2)
  1654.   00016    d8 cb         fmul     ST(0), ST(3)
  1655.   00018    de c1         faddp     ST(1), ST(0)
  1656.   0001a    d9 c3         fld     ST(3)
  1657.   0001c    d8 cc         fmul     ST(0), ST(4)
  1658.   0001e    de c1         faddp     ST(1), ST(0)
  1659.   00020    d9 fa         fsqrt
  1660.   00022    dd db         fstp     ST(3)
  1661.   00024    dd d8         fstp     ST(0)
  1662.   00026    dd d8         fstp     ST(0)
  1663.  
  1664. ; 1711 : #else
  1665. ; 1712 :     return (FLOAT) sqrt(pV->x * pV->x + pV->y * pV->y + pV->z * pV->z);
  1666. ; 1713 : #endif
  1667. ; 1714 : }
  1668.  
  1669.   00028    5d         pop     ebp
  1670.   00029    c3         ret     0
  1671. ?D3DXVec3Length@@YAMPBUD3DXVECTOR3@@@Z ENDP        ; D3DXVec3Length
  1672. _TEXT    ENDS
  1673. PUBLIC    ?D3DXVec3Cross@@YAPAUD3DXVECTOR3@@PAU1@PBU1@1@Z    ; D3DXVec3Cross
  1674. ; Function compile flags: /Ogs
  1675. ;    COMDAT ?D3DXVec3Cross@@YAPAUD3DXVECTOR3@@PAU1@PBU1@1@Z
  1676. _TEXT    SEGMENT
  1677. _v$ = -12                        ; size = 12
  1678. _pOut$ = 8                        ; size = 4
  1679. _pV1$ = 12                        ; size = 4
  1680. _pV2$ = 16                        ; size = 4
  1681. ?D3DXVec3Cross@@YAPAUD3DXVECTOR3@@PAU1@PBU1@1@Z PROC NEAR ; D3DXVec3Cross, COMDAT
  1682.  
  1683. ; 1753 :     return pOut;
  1684. ; 1754 : }
  1685.  
  1686.   00000    8b ff         npad     2
  1687.  
  1688. ; 1740 : {
  1689.  
  1690.   00002    55         push     ebp
  1691.   00003    8b ec         mov     ebp, esp
  1692.   00005    83 ec 0c     sub     esp, 12            ; 0000000cH
  1693.  
  1694. ; 1741 :     D3DXVECTOR3 v;
  1695. ; 1742 : 
  1696. ; 1743 : #ifdef D3DX_DEBUG
  1697. ; 1744 :     if(!pOut || !pV1 || !pV2)
  1698. ; 1745 :         return NULL;
  1699. ; 1746 : #endif
  1700. ; 1747 : 
  1701. ; 1748 :     v.x = pV1->y * pV2->z - pV1->z * pV2->y;
  1702.  
  1703.   00008    8b 4d 10     mov     ecx, DWORD PTR _pV2$[ebp]
  1704.   0000b    8b 45 0c     mov     eax, DWORD PTR _pV1$[ebp]
  1705.   0000e    d9 41 08     fld     DWORD PTR [ecx+8]
  1706.   00011    d8 48 04     fmul     DWORD PTR [eax+4]
  1707.   00014    56         push     esi
  1708.   00015    d9 40 08     fld     DWORD PTR [eax+8]
  1709.   00018    57         push     edi
  1710.   00019    d8 49 04     fmul     DWORD PTR [ecx+4]
  1711.  
  1712. ; 1749 :     v.y = pV1->z * pV2->x - pV1->x * pV2->z;
  1713. ; 1750 :     v.z = pV1->x * pV2->y - pV1->y * pV2->x;
  1714. ; 1751 : 
  1715. ; 1752 :     *pOut = v;
  1716.  
  1717.   0001c    8d 75 f4     lea     esi, DWORD PTR _v$[ebp]
  1718.   0001f    de e9         fsubp     ST(1), ST(0)
  1719.   00021    d9 5d f4     fstp     DWORD PTR _v$[ebp]
  1720.   00024    d9 40 08     fld     DWORD PTR [eax+8]
  1721.   00027    d8 09         fmul     DWORD PTR [ecx]
  1722.   00029    d9 41 08     fld     DWORD PTR [ecx+8]
  1723.   0002c    d8 08         fmul     DWORD PTR [eax]
  1724.   0002e    de e9         fsubp     ST(1), ST(0)
  1725.   00030    d9 5d f8     fstp     DWORD PTR _v$[ebp+4]
  1726.   00033    d9 00         fld     DWORD PTR [eax]
  1727.   00035    d8 49 04     fmul     DWORD PTR [ecx+4]
  1728.   00038    d9 01         fld     DWORD PTR [ecx]
  1729.   0003a    d8 48 04     fmul     DWORD PTR [eax+4]
  1730.   0003d    8b 45 08     mov     eax, DWORD PTR _pOut$[ebp]
  1731.   00040    8b f8         mov     edi, eax
  1732.   00042    de e9         fsubp     ST(1), ST(0)
  1733.   00044    d9 5d fc     fstp     DWORD PTR _v$[ebp+8]
  1734.   00047    a5         movsd
  1735.   00048    a5         movsd
  1736.   00049    a5         movsd
  1737.   0004a    5f         pop     edi
  1738.   0004b    5e         pop     esi
  1739.  
  1740. ; 1753 :     return pOut;
  1741. ; 1754 : }
  1742.  
  1743.   0004c    c9         leave
  1744.   0004d    c3         ret     0
  1745. ?D3DXVec3Cross@@YAPAUD3DXVECTOR3@@PAU1@PBU1@1@Z ENDP    ; D3DXVec3Cross
  1746. _TEXT    ENDS
  1747. PUBLIC    ?BNormal@DXCrackFVF@@QAE_NXZ            ; DXCrackFVF::BNormal
  1748. ; Function compile flags: /Ogs
  1749. ; File d:\builds\nt32_fre\multimedia\directx\dxsdk\src\mview\gxu\gxcrackfvf.h
  1750. ;    COMDAT ?BNormal@DXCrackFVF@@QAE_NXZ
  1751. _TEXT    SEGMENT
  1752. ?BNormal@DXCrackFVF@@QAE_NXZ PROC NEAR            ; DXCrackFVF::BNormal, COMDAT
  1753. ; _this$ = ecx
  1754.  
  1755. ; 70   :     inline bool         BNormal()       { return m_oNormal > 0; }
  1756.  
  1757.   00000    33 c0         xor     eax, eax
  1758.   00002    3b 41 08     cmp     eax, DWORD PTR [ecx+8]
  1759.   00005    1b c0         sbb     eax, eax
  1760.   00007    f7 d8         neg     eax
  1761.   00009    c3         ret     0
  1762. ?BNormal@DXCrackFVF@@QAE_NXZ ENDP            ; DXCrackFVF::BNormal
  1763. _TEXT    ENDS
  1764. PUBLIC    ?BDiffuse@DXCrackFVF@@QAE_NXZ            ; DXCrackFVF::BDiffuse
  1765. ; Function compile flags: /Ogs
  1766. ;    COMDAT ?BDiffuse@DXCrackFVF@@QAE_NXZ
  1767. _TEXT    SEGMENT
  1768. ?BDiffuse@DXCrackFVF@@QAE_NXZ PROC NEAR            ; DXCrackFVF::BDiffuse, COMDAT
  1769. ; _this$ = ecx
  1770.  
  1771. ; 72   :     inline bool         BDiffuse()      { return m_oDiffuse > 0; }
  1772.  
  1773.   00000    33 c0         xor     eax, eax
  1774.   00002    3b 41 10     cmp     eax, DWORD PTR [ecx+16]
  1775.   00005    1b c0         sbb     eax, eax
  1776.   00007    f7 d8         neg     eax
  1777.   00009    c3         ret     0
  1778. ?BDiffuse@DXCrackFVF@@QAE_NXZ ENDP            ; DXCrackFVF::BDiffuse
  1779. _TEXT    ENDS
  1780. PUBLIC    ?BSpecular@DXCrackFVF@@QAE_NXZ            ; DXCrackFVF::BSpecular
  1781. ; Function compile flags: /Ogs
  1782. ;    COMDAT ?BSpecular@DXCrackFVF@@QAE_NXZ
  1783. _TEXT    SEGMENT
  1784. ?BSpecular@DXCrackFVF@@QAE_NXZ PROC NEAR        ; DXCrackFVF::BSpecular, COMDAT
  1785. ; _this$ = ecx
  1786.  
  1787. ; 73   :     inline bool         BSpecular()     { return m_oSpecular > 0; }
  1788.  
  1789.   00000    33 c0         xor     eax, eax
  1790.   00002    3b 41 14     cmp     eax, DWORD PTR [ecx+20]
  1791.   00005    1b c0         sbb     eax, eax
  1792.   00007    f7 d8         neg     eax
  1793.   00009    c3         ret     0
  1794. ?BSpecular@DXCrackFVF@@QAE_NXZ ENDP            ; DXCrackFVF::BSpecular
  1795. _TEXT    ENDS
  1796. PUBLIC    ?BTex1@DXCrackFVF@@QAE_NXZ            ; DXCrackFVF::BTex1
  1797. ; Function compile flags: /Ogs
  1798. ;    COMDAT ?BTex1@DXCrackFVF@@QAE_NXZ
  1799. _TEXT    SEGMENT
  1800. ?BTex1@DXCrackFVF@@QAE_NXZ PROC NEAR            ; DXCrackFVF::BTex1, COMDAT
  1801. ; _this$ = ecx
  1802.  
  1803. ; 74   :     inline bool         BTex1()         { return m_oTex[0] > 0; }
  1804.  
  1805.   00000    33 c0         xor     eax, eax
  1806.   00002    3b 41 18     cmp     eax, DWORD PTR [ecx+24]
  1807.   00005    1b c0         sbb     eax, eax
  1808.   00007    f7 d8         neg     eax
  1809.   00009    c3         ret     0
  1810. ?BTex1@DXCrackFVF@@QAE_NXZ ENDP                ; DXCrackFVF::BTex1
  1811. _TEXT    ENDS
  1812. PUBLIC    ?CWeights@DXCrackFVF@@QAEKXZ            ; DXCrackFVF::CWeights
  1813. ; Function compile flags: /Ogs
  1814. ;    COMDAT ?CWeights@DXCrackFVF@@QAEKXZ
  1815. _TEXT    SEGMENT
  1816. ?CWeights@DXCrackFVF@@QAEKXZ PROC NEAR            ; DXCrackFVF::CWeights, COMDAT
  1817. ; _this$ = ecx
  1818.  
  1819. ; 76   :     inline DWORD        CWeights()      { return m_cWeights; }
  1820.  
  1821.   00000    8b 41 38     mov     eax, DWORD PTR [ecx+56]
  1822.   00003    c3         ret     0
  1823. ?CWeights@DXCrackFVF@@QAEKXZ ENDP            ; DXCrackFVF::CWeights
  1824. _TEXT    ENDS
  1825. PUBLIC    ?CTexCoords@DXCrackFVF@@QAEKXZ            ; DXCrackFVF::CTexCoords
  1826. ; Function compile flags: /Ogs
  1827. ;    COMDAT ?CTexCoords@DXCrackFVF@@QAEKXZ
  1828. _TEXT    SEGMENT
  1829. ?CTexCoords@DXCrackFVF@@QAEKXZ PROC NEAR        ; DXCrackFVF::CTexCoords, COMDAT
  1830. ; _this$ = ecx
  1831.  
  1832. ; 77   :     inline DWORD        CTexCoords()    { return m_cTexCoords; }
  1833.  
  1834.   00000    8b 41 3c     mov     eax, DWORD PTR [ecx+60]
  1835.   00003    c3         ret     0
  1836. ?CTexCoords@DXCrackFVF@@QAEKXZ ENDP            ; DXCrackFVF::CTexCoords
  1837. _TEXT    ENDS
  1838. PUBLIC    ??0DXCrackFVF@@QAE@K@Z                ; DXCrackFVF::DXCrackFVF
  1839. ; Function compile flags: /Ogs
  1840. ;    COMDAT ??0DXCrackFVF@@QAE@K@Z
  1841. _TEXT    SEGMENT
  1842. _dwFVF$ = 8                        ; size = 4
  1843. ??0DXCrackFVF@@QAE@K@Z PROC NEAR            ; DXCrackFVF::DXCrackFVF, COMDAT
  1844. ; _this$ = ecx
  1845.  
  1846. ; 192  : }
  1847.  
  1848.   00000    8b ff         npad     2
  1849.  
  1850. ; 115  : {
  1851.  
  1852.   00002    55         push     ebp
  1853.   00003    8b ec         mov     ebp, esp
  1854.   00005    8b c1         mov     eax, ecx
  1855.   00007    53         push     ebx
  1856.   00008    8b 5d 08     mov     ebx, DWORD PTR _dwFVF$[ebp]
  1857.   0000b    56         push     esi
  1858.  
  1859. ; 116  :     DWORD oCur = 0;
  1860. ; 117  :     DWORD dwPosition;
  1861. ; 118  :     DWORD dwTexCoordInfo;
  1862. ; 119  :     DWORD iTexCoord;
  1863. ; 120  :     DWORD dwTexCoordSize;
  1864. ; 121  :     m_oTex[0] = 0;
  1865. ; 122  : 
  1866. ; 123  :     dwPosition = dwFVF & D3DFVF_POSITION_MASK;
  1867.  
  1868.   0000c    8b d3         mov     edx, ebx
  1869.   0000e    57         push     edi
  1870.   0000f    33 ff         xor     edi, edi
  1871.   00011    81 e2 0e 40 00
  1872.     00         and     edx, 16398        ; 0000400eH
  1873.   00017    33 c9         xor     ecx, ecx
  1874.  
  1875. ; 124  : 
  1876. ; 125  :     if (dwPosition == D3DFVF_XYZ)
  1877.  
  1878.   00019    83 fa 02     cmp     edx, 2
  1879.   0001c    8d 70 18     lea     esi, DWORD PTR [eax+24]
  1880.   0001f    89 18         mov     DWORD PTR [eax], ebx
  1881.   00021    89 78 08     mov     DWORD PTR [eax+8], edi
  1882.   00024    89 78 0c     mov     DWORD PTR [eax+12], edi
  1883.   00027    89 78 10     mov     DWORD PTR [eax+16], edi
  1884.   0002a    89 78 14     mov     DWORD PTR [eax+20], edi
  1885.   0002d    89 78 38     mov     DWORD PTR [eax+56], edi
  1886.   00030    89 78 3c     mov     DWORD PTR [eax+60], edi
  1887.   00033    89 3e         mov     DWORD PTR [esi], edi
  1888.   00035    75 05         jne     SHORT $L55539
  1889.  
  1890. ; 126  :     {
  1891. ; 127  :         oCur += 3 * sizeof(float);
  1892.  
  1893.   00037    6a 0c         push     12            ; 0000000cH
  1894. $L57135:
  1895.   00039    59         pop     ecx
  1896.  
  1897. ; 128  :     }
  1898. ; 129  :     else if (dwPosition == D3DFVF_XYZRHW)
  1899.  
  1900.   0003a    eb 1d         jmp     SHORT $L57132
  1901. $L55539:
  1902.   0003c    83 fa 04     cmp     edx, 4
  1903.   0003f    75 04         jne     SHORT $L55542
  1904.  
  1905. ; 130  :     {
  1906. ; 131  :         oCur += 4 * sizeof(float);
  1907.  
  1908.   00041    6a 10         push     16            ; 00000010H
  1909.  
  1910. ; 132  :     }
  1911. ; 133  :     else if (dwPosition >= D3DFVF_XYZB1)
  1912.  
  1913.   00043    eb f4         jmp     SHORT $L57135
  1914. $L55542:
  1915.   00045    83 fa 06     cmp     edx, 6
  1916.   00048    72 0f         jb     SHORT $L57132
  1917.  
  1918. ; 134  :     {
  1919. ; 135  :         m_cWeights = (dwPosition >> 1) - 2;
  1920.  
  1921.   0004a    d1 ea         shr     edx, 1
  1922.   0004c    8d 4a fe     lea     ecx, DWORD PTR [edx-2]
  1923.   0004f    89 48 38     mov     DWORD PTR [eax+56], ecx
  1924.  
  1925. ; 136  :         oCur += (3 + m_cWeights) * sizeof(float);
  1926.  
  1927.   00052    8d 0c 8d 0c 00
  1928.     00 00         lea     ecx, DWORD PTR [ecx*4+12]
  1929. $L57132:
  1930.  
  1931. ; 137  :     }
  1932. ; 138  : 
  1933. ; 139  :     if ( dwFVF & D3DFVF_NORMAL )
  1934.  
  1935.   00059    f6 c3 10     test     bl, 16            ; 00000010H
  1936.   0005c    74 06         je     SHORT $L55547
  1937.  
  1938. ; 140  :     {
  1939. ; 141  :         m_oNormal = oCur;
  1940.  
  1941.   0005e    89 48 08     mov     DWORD PTR [eax+8], ecx
  1942.  
  1943. ; 142  :         oCur += 3 * sizeof(float);
  1944.  
  1945.   00061    83 c1 0c     add     ecx, 12            ; 0000000cH
  1946. $L55547:
  1947.  
  1948. ; 143  :     }
  1949. ; 144  : 
  1950. ; 145  :     if ( dwFVF & D3DFVF_PSIZE )
  1951.  
  1952.   00064    f6 c3 20     test     bl, 32            ; 00000020H
  1953.   00067    74 06         je     SHORT $L57133
  1954.  
  1955. ; 146  :     {
  1956. ; 147  :         m_oPointSize = oCur;
  1957.  
  1958.   00069    89 48 0c     mov     DWORD PTR [eax+12], ecx
  1959.  
  1960. ; 148  :         oCur += sizeof(float);
  1961.  
  1962.   0006c    83 c1 04     add     ecx, 4
  1963. $L57133:
  1964.  
  1965. ; 149  :     }
  1966. ; 150  : 
  1967. ; 151  :     if ( dwFVF & D3DFVF_DIFFUSE )
  1968.  
  1969.   0006f    f6 c3 40     test     bl, 64            ; 00000040H
  1970.   00072    74 06         je     SHORT $L57134
  1971.  
  1972. ; 152  :     {
  1973. ; 153  :         m_oDiffuse = oCur;
  1974.  
  1975.   00074    89 48 10     mov     DWORD PTR [eax+16], ecx
  1976.  
  1977. ; 154  :         oCur += sizeof(D3DCOLOR);
  1978.  
  1979.   00077    83 c1 04     add     ecx, 4
  1980. $L57134:
  1981.  
  1982. ; 155  :     }
  1983. ; 156  : 
  1984. ; 157  :     if ( dwFVF & D3DFVF_SPECULAR )
  1985.  
  1986.   0007a    84 db         test     bl, bl
  1987.   0007c    79 06         jns     SHORT $L55553
  1988.  
  1989. ; 158  :     {
  1990. ; 159  :         m_oSpecular = oCur;
  1991.  
  1992.   0007e    89 48 14     mov     DWORD PTR [eax+20], ecx
  1993.  
  1994. ; 160  :         oCur += sizeof(D3DCOLOR);
  1995.  
  1996.   00081    83 c1 04     add     ecx, 4
  1997. $L55553:
  1998.  
  1999. ; 161  :     }
  2000. ; 162  : 
  2001. ; 163  :     if ( dwFVF & D3DFVF_TEXCOUNT_MASK )
  2002.  
  2003.   00084    f6 c7 0f     test     bh, 15            ; 0000000fH
  2004.   00087    74 3d         je     SHORT $L55559
  2005.  
  2006. ; 164  :     {
  2007. ; 165  :         m_oTex[0] = oCur;
  2008. ; 166  : 
  2009. ; 167  :         // only one tu/tv set currently supported
  2010. ; 168  : 
  2011. ; 169  :         m_cTexCoords = ((dwFVF & D3DFVF_TEXCOUNT_MASK)>>D3DFVF_TEXCOUNT_SHIFT);
  2012.  
  2013.   00089    8b d3         mov     edx, ebx
  2014.   0008b    c1 ea 08     shr     edx, 8
  2015.   0008e    83 e2 0f     and     edx, 15            ; 0000000fH
  2016.  
  2017. ; 170  : 
  2018. ; 171  :         if(m_cTexCoords > 8)
  2019.  
  2020.   00091    83 fa 08     cmp     edx, 8
  2021.   00094    89 0e         mov     DWORD PTR [esi], ecx
  2022.   00096    89 50 3c     mov     DWORD PTR [eax+60], edx
  2023.   00099    76 07         jbe     SHORT $L55556
  2024.  
  2025. ; 172  :             m_cTexCoords = 8;
  2026.  
  2027.   0009b    c7 40 3c 08 00
  2028.     00 00         mov     DWORD PTR [eax+60], 8
  2029. $L55556:
  2030.  
  2031. ; 173  : 
  2032. ; 174  :         // all 2d, then go quick route
  2033. ; 175  :         //if ((dwFVF & 0xffff0000) == 0)
  2034. ; 176  :         //{
  2035. ; 177  :             //oCur += sizeof(float) * 2 * m_cTexCoords;
  2036. ; 178  :         //}
  2037. ; 179  :         //else
  2038. ; 180  :         {
  2039. ; 181  :             dwTexCoordSize = (dwFVF & 0xffff0000) >> 16;
  2040.  
  2041.   000a2    c1 eb 10     shr     ebx, 16            ; 00000010H
  2042.  
  2043. ; 182  :             for (iTexCoord = 0; iTexCoord < m_cTexCoords; iTexCoord++)
  2044.  
  2045.   000a5    33 d2         xor     edx, edx
  2046.   000a7    39 78 3c     cmp     DWORD PTR [eax+60], edi
  2047.   000aa    76 1a         jbe     SHORT $L55559
  2048. $L55557:
  2049.  
  2050. ; 183  :             {
  2051. ; 184  :                 m_oTex[iTexCoord] = oCur;
  2052. ; 185  :                 oCur += x_rgdwTexCoordSize[dwTexCoordSize & 0x3];
  2053.  
  2054.   000ac    8b fb         mov     edi, ebx
  2055.   000ae    83 e7 03     and     edi, 3
  2056.   000b1    89 0e         mov     DWORD PTR [esi], ecx
  2057.   000b3    03 0c bd 00 00
  2058.     00 00         add     ecx, DWORD PTR _x_rgdwTexCoordSize[edi*4]
  2059.  
  2060. ; 186  :                 dwTexCoordSize = dwTexCoordSize >> 2;
  2061.  
  2062.   000ba    c1 eb 02     shr     ebx, 2
  2063.   000bd    42         inc     edx
  2064.   000be    83 c6 04     add     esi, 4
  2065.   000c1    3b 50 3c     cmp     edx, DWORD PTR [eax+60]
  2066.   000c4    72 e6         jb     SHORT $L55557
  2067. $L55559:
  2068.   000c6    5f         pop     edi
  2069.   000c7    5e         pop     esi
  2070.  
  2071. ; 187  :             }
  2072. ; 188  :         }
  2073. ; 189  :     }
  2074. ; 190  : 
  2075. ; 191  :     m_cBytesPerVertex = oCur;
  2076.  
  2077.   000c8    89 48 04     mov     DWORD PTR [eax+4], ecx
  2078.   000cb    5b         pop     ebx
  2079.  
  2080. ; 192  : }
  2081.  
  2082.   000cc    5d         pop     ebp
  2083.   000cd    c2 04 00     ret     4
  2084. ??0DXCrackFVF@@QAE@K@Z ENDP                ; DXCrackFVF::DXCrackFVF
  2085. _TEXT    ENDS
  2086. PUBLIC    ?SetPosition@DXCrackFVF@@QAEXPAXPAUD3DXVECTOR3@@@Z ; DXCrackFVF::SetPosition
  2087. ; Function compile flags: /Ogs
  2088. ;    COMDAT ?SetPosition@DXCrackFVF@@QAEXPAXPAUD3DXVECTOR3@@@Z
  2089. _TEXT    SEGMENT
  2090. _pvPoint$ = 8                        ; size = 4
  2091. _pvPos$ = 12                        ; size = 4
  2092. ?SetPosition@DXCrackFVF@@QAEXPAXPAUD3DXVECTOR3@@@Z PROC NEAR ; DXCrackFVF::SetPosition, COMDAT
  2093. ; _this$ = ecx
  2094.  
  2095. ; 211  : }
  2096.  
  2097.   00000    8b ff         npad     2
  2098.  
  2099. ; 209  : {
  2100.  
  2101.   00002    55         push     ebp
  2102.   00003    8b ec         mov     ebp, esp
  2103.   00005    56         push     esi
  2104.  
  2105. ; 210  :     memcpy(pvPoint, pvPos, sizeof(D3DXVECTOR3));
  2106.  
  2107.   00006    8b 75 0c     mov     esi, DWORD PTR _pvPos$[ebp]
  2108.   00009    57         push     edi
  2109.   0000a    8b 7d 08     mov     edi, DWORD PTR _pvPoint$[ebp]
  2110.   0000d    a5         movsd
  2111.   0000e    a5         movsd
  2112.   0000f    a5         movsd
  2113.   00010    5f         pop     edi
  2114.   00011    5e         pop     esi
  2115.  
  2116. ; 211  : }
  2117.  
  2118.   00012    5d         pop     ebp
  2119.   00013    c2 08 00     ret     8
  2120. ?SetPosition@DXCrackFVF@@QAEXPAXPAUD3DXVECTOR3@@@Z ENDP    ; DXCrackFVF::SetPosition
  2121. _TEXT    ENDS
  2122. PUBLIC    ?SetNormal@DXCrackFVF@@QAEXPAXPAUD3DXVECTOR3@@@Z ; DXCrackFVF::SetNormal
  2123. ; Function compile flags: /Ogs
  2124. ;    COMDAT ?SetNormal@DXCrackFVF@@QAEXPAXPAUD3DXVECTOR3@@@Z
  2125. _TEXT    SEGMENT
  2126. _pvPoint$ = 8                        ; size = 4
  2127. _pvNormal$ = 12                        ; size = 4
  2128. ?SetNormal@DXCrackFVF@@QAEXPAXPAUD3DXVECTOR3@@@Z PROC NEAR ; DXCrackFVF::SetNormal, COMDAT
  2129. ; _this$ = ecx
  2130.  
  2131. ; 223  :     }
  2132. ; 224  : }
  2133.  
  2134.   00000    8b ff         npad     2
  2135.  
  2136. ; 219  : {
  2137.  
  2138.   00002    55         push     ebp
  2139.   00003    8b ec         mov     ebp, esp
  2140.  
  2141. ; 220  :     if (m_oNormal)
  2142.  
  2143.   00005    8b 41 08     mov     eax, DWORD PTR [ecx+8]
  2144.   00008    85 c0         test     eax, eax
  2145.   0000a    74 10         je     SHORT $L55577
  2146.  
  2147. ; 221  :     {
  2148. ; 222  :         memcpy(((PBYTE)pvPoint) + m_oNormal, pvNormal, sizeof(D3DXVECTOR3));
  2149.  
  2150.   0000c    8b 4d 08     mov     ecx, DWORD PTR _pvPoint$[ebp]
  2151.   0000f    56         push     esi
  2152.   00010    8b 75 0c     mov     esi, DWORD PTR _pvNormal$[ebp]
  2153.   00013    57         push     edi
  2154.   00014    8d 3c 08     lea     edi, DWORD PTR [eax+ecx]
  2155.   00017    a5         movsd
  2156.   00018    a5         movsd
  2157.   00019    a5         movsd
  2158.   0001a    5f         pop     edi
  2159.   0001b    5e         pop     esi
  2160. $L55577:
  2161.  
  2162. ; 223  :     }
  2163. ; 224  : }
  2164.  
  2165.   0001c    5d         pop     ebp
  2166.   0001d    c2 08 00     ret     8
  2167. ?SetNormal@DXCrackFVF@@QAEXPAXPAUD3DXVECTOR3@@@Z ENDP    ; DXCrackFVF::SetNormal
  2168. _TEXT    ENDS
  2169. PUBLIC    ?SetDiffuse@DXCrackFVF@@QAEXPAXK@Z        ; DXCrackFVF::SetDiffuse
  2170. ; Function compile flags: /Ogs
  2171. ;    COMDAT ?SetDiffuse@DXCrackFVF@@QAEXPAXK@Z
  2172. _TEXT    SEGMENT
  2173. _pvPoint$ = 8                        ; size = 4
  2174. _color$ = 12                        ; size = 4
  2175. ?SetDiffuse@DXCrackFVF@@QAEXPAXK@Z PROC NEAR        ; DXCrackFVF::SetDiffuse, COMDAT
  2176. ; _this$ = ecx
  2177.  
  2178. ; 249  :     }
  2179. ; 250  : }
  2180.  
  2181.   00000    8b ff         npad     2
  2182.  
  2183. ; 245  : {
  2184.  
  2185.   00002    55         push     ebp
  2186.   00003    8b ec         mov     ebp, esp
  2187.  
  2188. ; 246  :     if (m_oDiffuse)
  2189.  
  2190.   00005    8b 41 10     mov     eax, DWORD PTR [ecx+16]
  2191.   00008    85 c0         test     eax, eax
  2192.   0000a    74 09         je     SHORT $L55593
  2193.  
  2194. ; 247  :     {
  2195. ; 248  :         memcpy(((PBYTE)pvPoint) + m_oDiffuse, &color, sizeof(D3DCOLOR));
  2196.  
  2197.   0000c    8b 4d 0c     mov     ecx, DWORD PTR _color$[ebp]
  2198.   0000f    8b 55 08     mov     edx, DWORD PTR _pvPoint$[ebp]
  2199.   00012    89 0c 10     mov     DWORD PTR [eax+edx], ecx
  2200. $L55593:
  2201.  
  2202. ; 249  :     }
  2203. ; 250  : }
  2204.  
  2205.   00015    5d         pop     ebp
  2206.   00016    c2 08 00     ret     8
  2207. ?SetDiffuse@DXCrackFVF@@QAEXPAXK@Z ENDP            ; DXCrackFVF::SetDiffuse
  2208. _TEXT    ENDS
  2209. PUBLIC    ?SetSpecular@DXCrackFVF@@QAEXPAXK@Z        ; DXCrackFVF::SetSpecular
  2210. ; Function compile flags: /Ogs
  2211. ;    COMDAT ?SetSpecular@DXCrackFVF@@QAEXPAXK@Z
  2212. _TEXT    SEGMENT
  2213. _pvPoint$ = 8                        ; size = 4
  2214. _color$ = 12                        ; size = 4
  2215. ?SetSpecular@DXCrackFVF@@QAEXPAXK@Z PROC NEAR        ; DXCrackFVF::SetSpecular, COMDAT
  2216. ; _this$ = ecx
  2217.  
  2218. ; 262  :     }
  2219. ; 263  : }
  2220.  
  2221.   00000    8b ff         npad     2
  2222.  
  2223. ; 258  : {
  2224.  
  2225.   00002    55         push     ebp
  2226.   00003    8b ec         mov     ebp, esp
  2227.  
  2228. ; 259  :     if (m_oSpecular)
  2229.  
  2230.   00005    8b 41 14     mov     eax, DWORD PTR [ecx+20]
  2231.   00008    85 c0         test     eax, eax
  2232.   0000a    74 09         je     SHORT $L55601
  2233.  
  2234. ; 260  :     {
  2235. ; 261  :         memcpy(((PBYTE)pvPoint) + m_oSpecular, &color, sizeof(D3DCOLOR));
  2236.  
  2237.   0000c    8b 4d 0c     mov     ecx, DWORD PTR _color$[ebp]
  2238.   0000f    8b 55 08     mov     edx, DWORD PTR _pvPoint$[ebp]
  2239.   00012    89 0c 10     mov     DWORD PTR [eax+edx], ecx
  2240. $L55601:
  2241.  
  2242. ; 262  :     }
  2243. ; 263  : }
  2244.  
  2245.   00015    5d         pop     ebp
  2246.   00016    c2 08 00     ret     8
  2247. ?SetSpecular@DXCrackFVF@@QAEXPAXK@Z ENDP        ; DXCrackFVF::SetSpecular
  2248. _TEXT    ENDS
  2249. PUBLIC    ?SetTex1@DXCrackFVF@@QAEXPAXPAUD3DXVECTOR2@@@Z    ; DXCrackFVF::SetTex1
  2250. ; Function compile flags: /Ogs
  2251. ;    COMDAT ?SetTex1@DXCrackFVF@@QAEXPAXPAUD3DXVECTOR2@@@Z
  2252. _TEXT    SEGMENT
  2253. _pvPoint$ = 8                        ; size = 4
  2254. _puvTex1$ = 12                        ; size = 4
  2255. ?SetTex1@DXCrackFVF@@QAEXPAXPAUD3DXVECTOR2@@@Z PROC NEAR ; DXCrackFVF::SetTex1, COMDAT
  2256. ; _this$ = ecx
  2257.  
  2258. ; 275  :     }
  2259. ; 276  : }
  2260.  
  2261.   00000    8b ff         npad     2
  2262.  
  2263. ; 271  : {
  2264.  
  2265.   00002    55         push     ebp
  2266.   00003    8b ec         mov     ebp, esp
  2267.  
  2268. ; 272  :     if (m_oTex[0])
  2269.  
  2270.   00005    8b 41 18     mov     eax, DWORD PTR [ecx+24]
  2271.   00008    85 c0         test     eax, eax
  2272.   0000a    74 14         je     SHORT $L55609
  2273.  
  2274. ; 273  :     {
  2275. ; 274  :         memcpy(((PBYTE)pvPoint) + m_oTex[0], puvTex1, sizeof(D3DXVECTOR2));
  2276.  
  2277.   0000c    8b 4d 0c     mov     ecx, DWORD PTR _puvTex1$[ebp]
  2278.   0000f    8b 55 08     mov     edx, DWORD PTR _pvPoint$[ebp]
  2279.   00012    56         push     esi
  2280.   00013    8b 31         mov     esi, DWORD PTR [ecx]
  2281.   00015    89 34 10     mov     DWORD PTR [eax+edx], esi
  2282.   00018    8b 49 04     mov     ecx, DWORD PTR [ecx+4]
  2283.   0001b    89 4c 10 04     mov     DWORD PTR [eax+edx+4], ecx
  2284.   0001f    5e         pop     esi
  2285. $L55609:
  2286.  
  2287. ; 275  :     }
  2288. ; 276  : }
  2289.  
  2290.   00020    5d         pop     ebp
  2291.   00021    c2 08 00     ret     8
  2292. ?SetTex1@DXCrackFVF@@QAEXPAXPAUD3DXVECTOR2@@@Z ENDP    ; DXCrackFVF::SetTex1
  2293. _TEXT    ENDS
  2294. PUBLIC    ?SetWeight@DXCrackFVF@@QAEXPAXIM@Z        ; DXCrackFVF::SetWeight
  2295. ; Function compile flags: /Ogs
  2296. ;    COMDAT ?SetWeight@DXCrackFVF@@QAEXPAXIM@Z
  2297. _TEXT    SEGMENT
  2298. _pvPoint$ = 8                        ; size = 4
  2299. _iWeight$ = 12                        ; size = 4
  2300. _fWeight$ = 16                        ; size = 4
  2301. ?SetWeight@DXCrackFVF@@QAEXPAXIM@Z PROC NEAR        ; DXCrackFVF::SetWeight, COMDAT
  2302. ; _this$ = ecx
  2303.  
  2304. ; 331  :     }
  2305. ; 332  : }
  2306.  
  2307.   00000    8b ff         npad     2
  2308.  
  2309. ; 327  : {
  2310.  
  2311.   00002    55         push     ebp
  2312.   00003    8b ec         mov     ebp, esp
  2313.  
  2314. ; 328  :     if (iWeight < m_cWeights)
  2315.  
  2316.   00005    8b 45 0c     mov     eax, DWORD PTR _iWeight$[ebp]
  2317.   00008    3b 41 38     cmp     eax, DWORD PTR [ecx+56]
  2318.   0000b    73 0a         jae     SHORT $L55654
  2319.  
  2320. ; 329  :     {
  2321. ; 330  :         memcpy(((PBYTE)pvPoint) + sizeof(D3DXVECTOR3) + sizeof(float) * iWeight, &fWeight, sizeof(float));
  2322.  
  2323.   0000d    8b 4d 10     mov     ecx, DWORD PTR _fWeight$[ebp]
  2324.   00010    8b 55 08     mov     edx, DWORD PTR _pvPoint$[ebp]
  2325.   00013    89 4c 82 0c     mov     DWORD PTR [edx+eax*4+12], ecx
  2326. $L55654:
  2327.  
  2328. ; 331  :     }
  2329. ; 332  : }
  2330.  
  2331.   00017    5d         pop     ebp
  2332.   00018    c2 0c 00     ret     12            ; 0000000cH
  2333. ?SetWeight@DXCrackFVF@@QAEXPAXIM@Z ENDP            ; DXCrackFVF::SetWeight
  2334. _TEXT    ENDS
  2335. PUBLIC    ?PuvGetTex1@DXCrackFVF@@QAEPAUD3DXVECTOR2@@PAX@Z ; DXCrackFVF::PuvGetTex1
  2336. ; Function compile flags: /Ogs
  2337. ;    COMDAT ?PuvGetTex1@DXCrackFVF@@QAEPAUD3DXVECTOR2@@PAX@Z
  2338. _TEXT    SEGMENT
  2339. _pvPoint$ = 8                        ; size = 4
  2340. ?PuvGetTex1@DXCrackFVF@@QAEPAUD3DXVECTOR2@@PAX@Z PROC NEAR ; DXCrackFVF::PuvGetTex1, COMDAT
  2341. ; _this$ = ecx
  2342.  
  2343. ; 415  : }
  2344.  
  2345.   00000    8b ff         npad     2
  2346.  
  2347. ; 413  : {
  2348.  
  2349.   00002    55         push     ebp
  2350.   00003    8b ec         mov     ebp, esp
  2351.  
  2352. ; 414  :     return (D3DXVECTOR2*)  (((PBYTE)pvPoint) + m_oTex[0]);
  2353.  
  2354.   00005    8b 41 18     mov     eax, DWORD PTR [ecx+24]
  2355.   00008    03 45 08     add     eax, DWORD PTR _pvPoint$[ebp]
  2356.  
  2357. ; 415  : }
  2358.  
  2359.   0000b    5d         pop     ebp
  2360.   0000c    c2 04 00     ret     4
  2361. ?PuvGetTex1@DXCrackFVF@@QAEPAUD3DXVECTOR2@@PAX@Z ENDP    ; DXCrackFVF::PuvGetTex1
  2362. _TEXT    ENDS
  2363. PUBLIC    ?CbTexCoordSize@DXCrackFVF@@QAEKK@Z        ; DXCrackFVF::CbTexCoordSize
  2364. ; Function compile flags: /Ogs
  2365. ;    COMDAT ?CbTexCoordSize@DXCrackFVF@@QAEKK@Z
  2366. _TEXT    SEGMENT
  2367. _iTexCoord$ = 8                        ; size = 4
  2368. ?CbTexCoordSize@DXCrackFVF@@QAEKK@Z PROC NEAR        ; DXCrackFVF::CbTexCoordSize, COMDAT
  2369. ; _this$ = ecx
  2370.  
  2371. ; 467  : }
  2372.  
  2373.   00000    8b ff         npad     2
  2374.  
  2375. ; 462  : {
  2376.  
  2377.   00002    55         push     ebp
  2378.   00003    8b ec         mov     ebp, esp
  2379.   00005    8b c1         mov     eax, ecx
  2380.  
  2381. ; 463  :     if (iTexCoord < m_cTexCoords)
  2382.  
  2383.   00007    8b 4d 08     mov     ecx, DWORD PTR _iTexCoord$[ebp]
  2384.   0000a    3b 48 3c     cmp     ecx, DWORD PTR [eax+60]
  2385.   0000d    73 14         jae     SHORT $L55752
  2386.  
  2387. ; 464  :         return x_rgdwTexCoordSize[(m_dwFVF >> (16 + iTexCoord * 2)) & 0x3];
  2388.  
  2389.   0000f    8b 00         mov     eax, DWORD PTR [eax]
  2390.   00011    8d 4c 09 10     lea     ecx, DWORD PTR [ecx+ecx+16]
  2391.   00015    d3 e8         shr     eax, cl
  2392.   00017    83 e0 03     and     eax, 3
  2393.   0001a    8b 04 85 00 00
  2394.     00 00         mov     eax, DWORD PTR _x_rgdwTexCoordSize[eax*4]
  2395.   00021    eb 02         jmp     SHORT $L55753
  2396. $L55752:
  2397.  
  2398. ; 465  :     else
  2399. ; 466  :         return 0;
  2400.  
  2401.   00023    33 c0         xor     eax, eax
  2402. $L55753:
  2403.  
  2404. ; 467  : }
  2405.  
  2406.   00025    5d         pop     ebp
  2407.   00026    c2 04 00     ret     4
  2408. ?CbTexCoordSize@DXCrackFVF@@QAEKK@Z ENDP        ; DXCrackFVF::CbTexCoordSize
  2409. _TEXT    ENDS
  2410. PUBLIC    ?GetTexCoordSizes@DXCrackFVF@@QAEXPAK@Z        ; DXCrackFVF::GetTexCoordSizes
  2411. ; Function compile flags: /Ogs
  2412. ;    COMDAT ?GetTexCoordSizes@DXCrackFVF@@QAEXPAK@Z
  2413. _TEXT    SEGMENT
  2414. _rgdwTexCoordSizes$ = 8                    ; size = 4
  2415. ?GetTexCoordSizes@DXCrackFVF@@QAEXPAK@Z PROC NEAR    ; DXCrackFVF::GetTexCoordSizes, COMDAT
  2416. ; _this$ = ecx
  2417.  
  2418. ; 489  :     }
  2419. ; 490  : }
  2420.  
  2421.   00000    8b ff         npad     2
  2422.  
  2423. ; 474  : {
  2424.  
  2425.   00002    55         push     ebp
  2426.   00003    8b ec         mov     ebp, esp
  2427.   00005    56         push     esi
  2428.  
  2429. ; 475  :     DWORD iTexCoord;
  2430. ; 476  : 
  2431. ; 477  :     for (iTexCoord = 0; iTexCoord < m_cTexCoords; iTexCoord++)
  2432.  
  2433.   00006    8b 75 08     mov     esi, DWORD PTR _rgdwTexCoordSizes$[ebp]
  2434.   00009    8b d1         mov     edx, ecx
  2435.   0000b    33 c0         xor     eax, eax
  2436.   0000d    39 42 3c     cmp     DWORD PTR [edx+60], eax
  2437.   00010    57         push     edi
  2438.   00011    76 21         jbe     SHORT $L57150
  2439.   00013    6a 10         push     16            ; 00000010H
  2440.   00015    59         pop     ecx
  2441. $L55759:
  2442.  
  2443. ; 478  :     {
  2444. ; 479  :        
  2445. ; 480  :         rgdwTexCoordSizes[iTexCoord] = x_rgdwTexCoordSize[(m_dwFVF >> (16 + iTexCoord * 2)) & 0x3];
  2446.  
  2447.   00016    8b 3a         mov     edi, DWORD PTR [edx]
  2448.   00018    d3 ef         shr     edi, cl
  2449.   0001a    83 e7 03     and     edi, 3
  2450.   0001d    8b 3c bd 00 00
  2451.     00 00         mov     edi, DWORD PTR _x_rgdwTexCoordSize[edi*4]
  2452.   00024    89 3c 86     mov     DWORD PTR [esi+eax*4], edi
  2453.   00027    40         inc     eax
  2454.   00028    41         inc     ecx
  2455.   00029    41         inc     ecx
  2456.   0002a    3b 42 3c     cmp     eax, DWORD PTR [edx+60]
  2457.   0002d    72 e7         jb     SHORT $L55759
  2458.  
  2459. ; 481  : 
  2460. ; 482  :  
  2461. ; 483  :     }
  2462. ; 484  : 
  2463. ; 485  :     // set the rest to 0
  2464. ; 486  :     for (;iTexCoord < 8; iTexCoord++)
  2465.  
  2466.   0002f    83 f8 08     cmp     eax, 8
  2467.   00032    73 0c         jae     SHORT $L57149
  2468. $L57150:
  2469.  
  2470. ; 487  :     {
  2471. ; 488  :         rgdwTexCoordSizes[iTexCoord] = 0;
  2472.  
  2473.   00034    6a 08         push     8
  2474.   00036    59         pop     ecx
  2475.   00037    8d 3c 86     lea     edi, DWORD PTR [esi+eax*4]
  2476.   0003a    2b c8         sub     ecx, eax
  2477.   0003c    33 c0         xor     eax, eax
  2478.   0003e    f3 ab         rep stosd
  2479. $L57149:
  2480.   00040    5f         pop     edi
  2481.   00041    5e         pop     esi
  2482.  
  2483. ; 489  :     }
  2484. ; 490  : }
  2485.  
  2486.   00042    5d         pop     ebp
  2487.   00043    c2 04 00     ret     4
  2488. ?GetTexCoordSizes@DXCrackFVF@@QAEXPAK@Z ENDP        ; DXCrackFVF::GetTexCoordSizes
  2489. _TEXT    ENDS
  2490. PUBLIC    ??0SLoadedFace@GXU@@QAE@XZ            ; GXU::SLoadedFace::SLoadedFace
  2491. ; Function compile flags: /Ogs
  2492. ; File d:\builds\nt32_fre\multimedia\directx\dxsdk\src\mview\gxu\loadutil.h
  2493. ;    COMDAT ??0SLoadedFace@GXU@@QAE@XZ
  2494. _TEXT    SEGMENT
  2495. ??0SLoadedFace@GXU@@QAE@XZ PROC NEAR            ; GXU::SLoadedFace::SLoadedFace, COMDAT
  2496. ; _this$ = ecx
  2497.  
  2498. ; 43   :     SLoadedFace()        
  2499.  
  2500.   00000    8b c1         mov     eax, ecx
  2501.   00002    80 60 0c f0     and     BYTE PTR [eax+12], -16    ; fffffff0H
  2502.   00006    83 08 ff     or     DWORD PTR [eax], -1
  2503.   00009    83 48 04 ff     or     DWORD PTR [eax+4], -1
  2504.   0000d    83 48 08 ff     or     DWORD PTR [eax+8], -1
  2505.   00011    c3         ret     0
  2506. ??0SLoadedFace@GXU@@QAE@XZ ENDP                ; GXU::SLoadedFace::SLoadedFace
  2507. _TEXT    ENDS
  2508. PUBLIC    ??0SLoadVertex@GXU@@QAE@XZ            ; GXU::SLoadVertex::SLoadVertex
  2509. ; Function compile flags: /Ogs
  2510. ;    COMDAT ??0SLoadVertex@GXU@@QAE@XZ
  2511. _TEXT    SEGMENT
  2512. ??0SLoadVertex@GXU@@QAE@XZ PROC NEAR            ; GXU::SLoadVertex::SLoadVertex, COMDAT
  2513. ; _this$ = ecx
  2514.   00000    8b c1         mov     eax, ecx
  2515.   00002    c3         ret     0
  2516. ??0SLoadVertex@GXU@@QAE@XZ ENDP                ; GXU::SLoadVertex::SLoadVertex
  2517. _TEXT    ENDS
  2518. PUBLIC    ?InitVertices@GXU@@YAJAAPAUSLoadVertex@1@K@Z    ; GXU::InitVertices
  2519. EXTRN    __EH_prolog:NEAR
  2520. EXTRN    __except_list:DWORD
  2521. EXTRN    ___CxxFrameHandler:NEAR
  2522. ;    COMDAT xdata$x
  2523. ; File d:\builds\nt32_fre\public\sdk\inc\d3dx9math.inl
  2524. xdata$x    SEGMENT
  2525. $T57210    DD    0ffffffffH
  2526.     DD    FLAT:$L57188
  2527. $T57204    DD    019930520H
  2528.     DD    01H
  2529.     DD    FLAT:$T57210
  2530.     DD    2 DUP(00H)
  2531.     DD    2 DUP(00H)
  2532. ; Function compile flags: /Ogs
  2533. ; File d:\builds\nt32_fre\multimedia\directx\dxsdk\src\mview\gxu\loadutil.cpp
  2534. xdata$x    ENDS
  2535. ;    COMDAT ?InitVertices@GXU@@YAJAAPAUSLoadVertex@1@K@Z
  2536. _TEXT    SEGMENT
  2537. $T57186 = -64                        ; size = 16
  2538. $T57185 = -48                        ; size = 12
  2539. $T57184 = -36                        ; size = 12
  2540. $T57187 = -24                        ; size = 8
  2541. $T57181 = -20                        ; size = 4
  2542. _hr$ = -16                        ; size = 4
  2543. __$EHRec$ = -12                        ; size = 12
  2544. _rglvVertices$ = 8                    ; size = 4
  2545. _cVertices$ = 12                    ; size = 4
  2546. ?InitVertices@GXU@@YAJAAPAUSLoadVertex@1@K@Z PROC NEAR    ; GXU::InitVertices, COMDAT
  2547.  
  2548. ; 379  : {
  2549.  
  2550.   00000    b8 00 00 00 00     mov     eax, __ehhandler$?InitVertices@GXU@@YAJAAPAUSLoadVertex@1@K@Z
  2551.   00005    e8 00 00 00 00     call     __EH_prolog
  2552.   0000a    83 ec 34     sub     esp, 52            ; 00000034H
  2553.  
  2554. ; 380  :     HRESULT hr = S_OK;
  2555. ; 381  :     DWORD iVertex;
  2556. ; 382  : 
  2557. ; 383  :     rglvVertices = new SLoadVertex[cVertices];
  2558.  
  2559.   0000d    8b 45 0c     mov     eax, DWORD PTR _cVertices$[ebp]
  2560.   00010    6b c0 44     imul     eax, 68            ; 00000044H
  2561.   00013    53         push     ebx
  2562.   00014    56         push     esi
  2563.   00015    33 db         xor     ebx, ebx
  2564.   00017    50         push     eax
  2565.   00018    89 5d f0     mov     DWORD PTR _hr$[ebp], ebx
  2566.   0001b    e8 00 00 00 00     call     ??2@YAPAXI@Z        ; operator new
  2567.   00020    8b f0         mov     esi, eax
  2568.   00022    59         pop     ecx
  2569.   00023    89 75 ec     mov     DWORD PTR $T57181[ebp], esi
  2570.   00026    3b f3         cmp     esi, ebx
  2571.   00028    89 5d fc     mov     DWORD PTR __$EHRec$[ebp+8], ebx
  2572.   0002b    74 14         je     SHORT $L57182
  2573.   0002d    68 00 00 00 00     push     OFFSET FLAT:??0SLoadVertex@GXU@@QAE@XZ
  2574.   00032    ff 75 0c     push     DWORD PTR _cVertices$[ebp]
  2575.   00035    6a 44         push     68            ; 00000044H
  2576.   00037    56         push     esi
  2577.   00038    e8 00 00 00 00     call     ??_H@YGXPAXIHP6EPAX0@Z@Z
  2578.   0003d    8b c6         mov     eax, esi
  2579.   0003f    eb 02         jmp     SHORT $L57183
  2580. $L57182:
  2581.   00041    33 c0         xor     eax, eax
  2582. $L57183:
  2583.  
  2584. ; 384  :     if (rglvVertices == NULL)
  2585.  
  2586.   00043    3b c3         cmp     eax, ebx
  2587.   00045    8b 4d 08     mov     ecx, DWORD PTR _rglvVertices$[ebp]
  2588.   00048    89 01         mov     DWORD PTR [ecx], eax
  2589.   0004a    75 0c         jne     SHORT $L56531
  2590.  
  2591. ; 385  :     {
  2592. ; 386  :         hr = E_OUTOFMEMORY;
  2593.  
  2594.   0004c    c7 45 f0 0e 00
  2595.     07 80         mov     DWORD PTR _hr$[ebp], -2147024882 ; 8007000eH
  2596.  
  2597. ; 387  :         goto e_Exit;
  2598.  
  2599.   00053    e9 ad 00 00 00     jmp     $e_Exit$56533
  2600. $L56531:
  2601.  
  2602. ; 388  :     }
  2603. ; 389  : 
  2604. ; 390  :     for (iVertex = 0; iVertex < cVertices; iVertex++)
  2605.  
  2606.   00058    33 d2         xor     edx, edx
  2607.   0005a    39 5d 0c     cmp     DWORD PTR _cVertices$[ebp], ebx
  2608.   0005d    0f 86 a2 00 00
  2609.     00         jbe     $e_Exit$56533
  2610.  
  2611. ; 391  :     {
  2612. ; 392  :         rglvVertices[iVertex].m_vPos = D3DXVECTOR3(0.0f, 0.0f, 0.0f);
  2613.  
  2614.   00063    d9 ee         fldz
  2615.   00065    33 c0         xor     eax, eax
  2616.   00067    d9 5d dc     fstp     DWORD PTR $T57184[ebp]
  2617.   0006a    57         push     edi
  2618.   0006b    d9 ee         fldz
  2619.   0006d    d9 5d e0     fstp     DWORD PTR $T57184[ebp+4]
  2620.   00070    d9 ee         fldz
  2621.   00072    d9 5d e4     fstp     DWORD PTR $T57184[ebp+8]
  2622.  
  2623. ; 393  :         rglvVertices[iVertex].m_vNormal = D3DXVECTOR3(0.0f, 0.0f, 0.0f);
  2624.  
  2625.   00075    d9 ee         fldz
  2626.   00077    d9 5d d0     fstp     DWORD PTR $T57185[ebp]
  2627.   0007a    d9 ee         fldz
  2628.   0007c    d9 5d d4     fstp     DWORD PTR $T57185[ebp+4]
  2629.   0007f    d9 ee         fldz
  2630.   00081    d9 5d d8     fstp     DWORD PTR $T57185[ebp+8]
  2631.  
  2632. ; 394  : //        rglvVertices[iVertex].m_color = D3DXCOLOR(0.9f, 0.6f, 0.4f, 0.0f);
  2633. ; 395  :         rglvVertices[iVertex].m_color = D3DXCOLOR(1.0f, 1.0f, 1.0f, 0.0f);
  2634.  
  2635.   00084    d9 e8         fld1
  2636.   00086    d9 5d c0     fstp     DWORD PTR $T57186[ebp]
  2637.   00089    d9 e8         fld1
  2638.   0008b    d9 5d c4     fstp     DWORD PTR $T57186[ebp+4]
  2639.   0008e    d9 e8         fld1
  2640.   00090    d9 5d c8     fstp     DWORD PTR $T57186[ebp+8]
  2641.   00093    d9 ee         fldz
  2642.   00095    d9 5d cc     fstp     DWORD PTR $T57186[ebp+12]
  2643.  
  2644. ; 396  :         rglvVertices[iVertex].m_uvTex1 = D3DXVECTOR2(0.0f, 0.0f);
  2645.  
  2646.   00098    d9 ee         fldz
  2647.   0009a    d9 5d e8     fstp     DWORD PTR $T57187[ebp]
  2648.   0009d    d9 ee         fldz
  2649.   0009f    d9 5d ec     fstp     DWORD PTR $T57187[ebp+4]
  2650. $L56535:
  2651.   000a2    8b 39         mov     edi, DWORD PTR [ecx]
  2652.   000a4    03 f8         add     edi, eax
  2653.   000a6    8d 75 dc     lea     esi, DWORD PTR $T57184[ebp]
  2654.   000a9    a5         movsd
  2655.   000aa    a5         movsd
  2656.   000ab    a5         movsd
  2657.   000ac    8b 31         mov     esi, DWORD PTR [ecx]
  2658.   000ae    8d 7c 30 24     lea     edi, DWORD PTR [eax+esi+36]
  2659.   000b2    8d 75 d0     lea     esi, DWORD PTR $T57185[ebp]
  2660.   000b5    a5         movsd
  2661.   000b6    a5         movsd
  2662.   000b7    a5         movsd
  2663.   000b8    8b 31         mov     esi, DWORD PTR [ecx]
  2664.   000ba    8d 7c 30 0c     lea     edi, DWORD PTR [eax+esi+12]
  2665.   000be    8d 75 c0     lea     esi, DWORD PTR $T57186[ebp]
  2666.   000c1    a5         movsd
  2667.   000c2    a5         movsd
  2668.   000c3    a5         movsd
  2669.   000c4    a5         movsd
  2670.   000c5    8b 31         mov     esi, DWORD PTR [ecx]
  2671.   000c7    8b 7d e8     mov     edi, DWORD PTR $T57187[ebp]
  2672.   000ca    89 7c 30 1c     mov     DWORD PTR [eax+esi+28], edi
  2673.   000ce    8b 7d ec     mov     edi, DWORD PTR $T57187[ebp+4]
  2674.   000d1    89 7c 30 20     mov     DWORD PTR [eax+esi+32], edi
  2675.  
  2676. ; 397  :         rglvVertices[iVertex].m_wPointRep = iVertex;
  2677.  
  2678.   000d5    8b 31         mov     esi, DWORD PTR [ecx]
  2679.   000d7    89 54 30 30     mov     DWORD PTR [eax+esi+48], edx
  2680.  
  2681. ; 398  :         rglvVertices[iVertex].m_wPointList = iVertex;
  2682.  
  2683.   000db    8b 31         mov     esi, DWORD PTR [ecx]
  2684.   000dd    89 54 30 34     mov     DWORD PTR [eax+esi+52], edx
  2685.  
  2686. ; 399  :         rglvVertices[iVertex].m_bOwned = false;
  2687.  
  2688.   000e1    8b 31         mov     esi, DWORD PTR [ecx]
  2689.   000e3    88 5c 30 38     mov     BYTE PTR [eax+esi+56], bl
  2690.  
  2691. ; 400  :         rglvVertices[iVertex].m_iFVFDataOffset = iVertex;
  2692.  
  2693.   000e7    8b 31         mov     esi, DWORD PTR [ecx]
  2694.   000e9    89 54 30 40     mov     DWORD PTR [eax+esi+64], edx
  2695.  
  2696. ; 401  : 
  2697. ; 402  :         rglvVertices[iVertex].m_iSmoothingGroup = 0;
  2698.  
  2699.   000ed    8b 31         mov     esi, DWORD PTR [ecx]
  2700.   000ef    66 89 5c 30 3a     mov     WORD PTR [eax+esi+58], bx
  2701.  
  2702. ; 403  :         rglvVertices[iVertex].m_cSmoothingGroupFaces = 0;
  2703.  
  2704.   000f4    8b 31         mov     esi, DWORD PTR [ecx]
  2705.   000f6    66 89 5c 30 3c     mov     WORD PTR [eax+esi+60], bx
  2706.   000fb    42         inc     edx
  2707.   000fc    83 c0 44     add     eax, 68            ; 00000044H
  2708.   000ff    3b 55 0c     cmp     edx, DWORD PTR _cVertices$[ebp]
  2709.   00102    72 9e         jb     SHORT $L56535
  2710.   00104    5f         pop     edi
  2711. $e_Exit$56533:
  2712.  
  2713. ; 404  :     }
  2714. ; 405  : 
  2715. ; 406  : e_Exit:
  2716. ; 407  :     return hr;
  2717. ; 408  : }
  2718.  
  2719.   00105    8b 4d f4     mov     ecx, DWORD PTR __$EHRec$[ebp]
  2720.   00108    8b 45 f0     mov     eax, DWORD PTR _hr$[ebp]
  2721.   0010b    5e         pop     esi
  2722.   0010c    5b         pop     ebx
  2723.   0010d    64 89 0d 00 00
  2724.     00 00         mov     DWORD PTR fs:__except_list, ecx
  2725.   00114    c9         leave
  2726.   00115    c3         ret     0
  2727. _TEXT    ENDS
  2728. ;    COMDAT text$x
  2729. text$x    SEGMENT
  2730. $L57188:
  2731.   00000    ff 75 ec     push     DWORD PTR $T57181[ebp]
  2732.   00003    e8 00 00 00 00     call     ??3@YAXPAX@Z        ; operator delete
  2733.   00008    59         pop     ecx
  2734.   00009    c3         ret     0
  2735. __ehhandler$?InitVertices@GXU@@YAJAAPAUSLoadVertex@1@K@Z:
  2736.   0000a    b8 00 00 00 00     mov     eax, OFFSET FLAT:$T57204
  2737.   0000f    e9 00 00 00 00     jmp     ___CxxFrameHandler
  2738. text$x    ENDS
  2739. ?InitVertices@GXU@@YAJAAPAUSLoadVertex@1@K@Z ENDP    ; GXU::InitVertices
  2740. PUBLIC    ??0SCorner@GXU@@QAE@XZ                ; GXU::SCorner::SCorner
  2741. ; Function compile flags: /Ogs
  2742. ;    COMDAT ??0SCorner@GXU@@QAE@XZ
  2743. _TEXT    SEGMENT
  2744. ??0SCorner@GXU@@QAE@XZ PROC NEAR            ; GXU::SCorner::SCorner, COMDAT
  2745. ; _this$ = ecx
  2746.   00000    8b c1         mov     eax, ecx
  2747.   00002    c3         ret     0
  2748. ??0SCorner@GXU@@QAE@XZ ENDP                ; GXU::SCorner::SCorner
  2749. _TEXT    ENDS
  2750. PUBLIC    ?InitFaces@GXU@@YAJAAPAUSLoadedFace@1@K@Z    ; GXU::InitFaces
  2751. ;    COMDAT xdata$x
  2752. ; File d:\builds\nt32_fre\multimedia\directx\dxsdk\src\mview\gxu\loadutil.h
  2753. xdata$x    SEGMENT
  2754. $T57243    DD    0ffffffffH
  2755.     DD    FLAT:$L57228
  2756. $T57239    DD    019930520H
  2757.     DD    01H
  2758.     DD    FLAT:$T57243
  2759.     DD    2 DUP(00H)
  2760.     DD    2 DUP(00H)
  2761. ; Function compile flags: /Ogs
  2762. ; File d:\builds\nt32_fre\multimedia\directx\dxsdk\src\mview\gxu\loadutil.cpp
  2763. xdata$x    ENDS
  2764. ;    COMDAT ?InitFaces@GXU@@YAJAAPAUSLoadedFace@1@K@Z
  2765. _TEXT    SEGMENT
  2766. __$EHRec$ = -12                        ; size = 12
  2767. _rglfFaces$ = 8                        ; size = 4
  2768. $T57225 = 12                        ; size = 4
  2769. _cFaces$ = 12                        ; size = 4
  2770. ?InitFaces@GXU@@YAJAAPAUSLoadedFace@1@K@Z PROC NEAR    ; GXU::InitFaces, COMDAT
  2771.  
  2772. ; 441  : {
  2773.  
  2774.   00000    b8 00 00 00 00     mov     eax, __ehhandler$?InitFaces@GXU@@YAJAAPAUSLoadedFace@1@K@Z
  2775.   00005    e8 00 00 00 00     call     __EH_prolog
  2776.   0000a    53         push     ebx
  2777.   0000b    56         push     esi
  2778.   0000c    57         push     edi
  2779.  
  2780. ; 442  :     HRESULT hr = S_OK;
  2781. ; 443  :     DWORD iFace;
  2782. ; 444  : 
  2783. ; 445  :     rglfFaces = new SLoadedFace[cFaces];
  2784.  
  2785.   0000d    8b 7d 0c     mov     edi, DWORD PTR _cFaces$[ebp]
  2786.   00010    8b c7         mov     eax, edi
  2787.   00012    6b c0 2c     imul     eax, 44            ; 0000002cH
  2788.   00015    50         push     eax
  2789.   00016    33 db         xor     ebx, ebx
  2790.   00018    e8 00 00 00 00     call     ??2@YAPAXI@Z        ; operator new
  2791.   0001d    8b f0         mov     esi, eax
  2792.   0001f    59         pop     ecx
  2793.   00020    89 75 0c     mov     DWORD PTR $T57225[ebp], esi
  2794.   00023    3b f3         cmp     esi, ebx
  2795.   00025    89 5d fc     mov     DWORD PTR __$EHRec$[ebp+8], ebx
  2796.   00028    74 12         je     SHORT $L57226
  2797.   0002a    68 00 00 00 00     push     OFFSET FLAT:??0SLoadedFace@GXU@@QAE@XZ ; GXU::SLoadedFace::SLoadedFace
  2798.   0002f    57         push     edi
  2799.   00030    6a 2c         push     44            ; 0000002cH
  2800.   00032    56         push     esi
  2801.   00033    e8 00 00 00 00     call     ??_H@YGXPAXIHP6EPAX0@Z@Z
  2802.   00038    8b c6         mov     eax, esi
  2803.   0003a    eb 02         jmp     SHORT $L57227
  2804. $L57226:
  2805.   0003c    33 c0         xor     eax, eax
  2806. $L57227:
  2807.  
  2808. ; 446  :     if (rglfFaces == NULL)
  2809.  
  2810.   0003e    85 c0         test     eax, eax
  2811.   00040    8b 4d 08     mov     ecx, DWORD PTR _rglfFaces$[ebp]
  2812.   00043    89 01         mov     DWORD PTR [ecx], eax
  2813.   00045    75 07         jne     SHORT $L56579
  2814.  
  2815. ; 447  :     {
  2816. ; 448  :         hr = E_OUTOFMEMORY;
  2817.  
  2818.   00047    bb 0e 00 07 80     mov     ebx, -2147024882    ; 8007000eH
  2819.  
  2820. ; 449  :         goto e_Exit;
  2821.  
  2822.   0004c    eb 1f         jmp     SHORT $e_Exit$56581
  2823. $L56579:
  2824.  
  2825. ; 450  :     }
  2826. ; 451  : 
  2827. ; 452  :     for (iFace = 0; iFace < cFaces; iFace++)
  2828.  
  2829.   0004e    85 ff         test     edi, edi
  2830.   00050    76 1b         jbe     SHORT $e_Exit$56581
  2831.   00052    33 d2         xor     edx, edx
  2832. $L56583:
  2833.  
  2834. ; 453  :     {
  2835. ; 454  :         rglfFaces[iFace].InitEmpty();
  2836.  
  2837.   00054    8b 01         mov     eax, DWORD PTR [ecx]
  2838.   00056    03 c2         add     eax, edx
  2839.   00058    80 60 0c f0     and     BYTE PTR [eax+12], -16    ; fffffff0H
  2840.   0005c    83 08 ff     or     DWORD PTR [eax], -1
  2841.   0005f    83 48 04 ff     or     DWORD PTR [eax+4], -1
  2842.   00063    83 48 08 ff     or     DWORD PTR [eax+8], -1
  2843.   00067    83 c2 2c     add     edx, 44            ; 0000002cH
  2844.   0006a    4f         dec     edi
  2845.   0006b    75 e7         jne     SHORT $L56583
  2846. $e_Exit$56581:
  2847.  
  2848. ; 455  :     }
  2849. ; 456  : 
  2850. ; 457  : e_Exit:
  2851. ; 458  :     return hr;
  2852. ; 459  : }
  2853.  
  2854.   0006d    8b 4d f4     mov     ecx, DWORD PTR __$EHRec$[ebp]
  2855.   00070    5f         pop     edi
  2856.   00071    5e         pop     esi
  2857.   00072    8b c3         mov     eax, ebx
  2858.   00074    5b         pop     ebx
  2859.   00075    64 89 0d 00 00
  2860.     00 00         mov     DWORD PTR fs:__except_list, ecx
  2861.   0007c    c9         leave
  2862.   0007d    c3         ret     0
  2863. _TEXT    ENDS
  2864. ;    COMDAT text$x
  2865. text$x    SEGMENT
  2866. $L57228:
  2867.   00000    ff 75 0c     push     DWORD PTR $T57225[ebp]
  2868.   00003    e8 00 00 00 00     call     ??3@YAXPAX@Z        ; operator delete
  2869.   00008    59         pop     ecx
  2870.   00009    c3         ret     0
  2871. __ehhandler$?InitFaces@GXU@@YAJAAPAUSLoadedFace@1@K@Z:
  2872.   0000a    b8 00 00 00 00     mov     eax, OFFSET FLAT:$T57239
  2873.   0000f    e9 00 00 00 00     jmp     ___CxxFrameHandler
  2874. text$x    ENDS
  2875. ?InitFaces@GXU@@YAJAAPAUSLoadedFace@1@K@Z ENDP        ; GXU::InitFaces
  2876. PUBLIC    ?BEqualWedges@GXU@@YA_NAAUSLoadVertex@1@0@Z    ; GXU::BEqualWedges
  2877. ; Function compile flags: /Ogs
  2878. ;    COMDAT ?BEqualWedges@GXU@@YA_NAAUSLoadVertex@1@0@Z
  2879. _TEXT    SEGMENT
  2880. _lv1$ = 8                        ; size = 4
  2881. _lv2$ = 12                        ; size = 4
  2882. ?BEqualWedges@GXU@@YA_NAAUSLoadVertex@1@0@Z PROC NEAR    ; GXU::BEqualWedges, COMDAT
  2883.  
  2884. ; 468  : }
  2885.  
  2886.   00000    8b ff         npad     2
  2887.  
  2888. ; 463  : {
  2889.  
  2890.   00002    55         push     ebp
  2891.   00003    8b ec         mov     ebp, esp
  2892.  
  2893. ; 464  : 
  2894. ; 465  :     return (lv1.m_color == lv2.m_color) 
  2895. ; 466  :         && (lv1.m_uvTex1 == lv2.m_uvTex1)
  2896. ; 467  :         && (lv1.m_vNormal == lv2.m_vNormal);
  2897.  
  2898.   00005    8b 4d 0c     mov     ecx, DWORD PTR _lv2$[ebp]
  2899.   00008    8b 55 08     mov     edx, DWORD PTR _lv1$[ebp]
  2900.   0000b    d9 41 0c     fld     DWORD PTR [ecx+12]
  2901.   0000e    d9 42 0c     fld     DWORD PTR [edx+12]
  2902.   00011    da e9         fucompp
  2903.   00013    df e0         fnstsw     ax
  2904.   00015    f6 c4 44     test     ah, 68            ; 00000044H
  2905.   00018    7a 7d         jp     SHORT $L57247
  2906.   0001a    d9 41 10     fld     DWORD PTR [ecx+16]
  2907.   0001d    d9 42 10     fld     DWORD PTR [edx+16]
  2908.   00020    da e9         fucompp
  2909.   00022    df e0         fnstsw     ax
  2910.   00024    f6 c4 44     test     ah, 68            ; 00000044H
  2911.   00027    7a 6e         jp     SHORT $L57247
  2912.   00029    d9 41 14     fld     DWORD PTR [ecx+20]
  2913.   0002c    d9 42 14     fld     DWORD PTR [edx+20]
  2914.   0002f    da e9         fucompp
  2915.   00031    df e0         fnstsw     ax
  2916.   00033    f6 c4 44     test     ah, 68            ; 00000044H
  2917.   00036    7a 5f         jp     SHORT $L57247
  2918.   00038    d9 41 18     fld     DWORD PTR [ecx+24]
  2919.   0003b    d9 42 18     fld     DWORD PTR [edx+24]
  2920.   0003e    da e9         fucompp
  2921.   00040    df e0         fnstsw     ax
  2922.   00042    f6 c4 44     test     ah, 68            ; 00000044H
  2923.   00045    7a 50         jp     SHORT $L57247
  2924.   00047    d9 41 1c     fld     DWORD PTR [ecx+28]
  2925.   0004a    d9 42 1c     fld     DWORD PTR [edx+28]
  2926.   0004d    da e9         fucompp
  2927.   0004f    df e0         fnstsw     ax
  2928.   00051    f6 c4 44     test     ah, 68            ; 00000044H
  2929.   00054    7a 41         jp     SHORT $L57247
  2930.   00056    d9 41 20     fld     DWORD PTR [ecx+32]
  2931.   00059    d9 42 20     fld     DWORD PTR [edx+32]
  2932.   0005c    da e9         fucompp
  2933.   0005e    df e0         fnstsw     ax
  2934.   00060    f6 c4 44     test     ah, 68            ; 00000044H
  2935.   00063    7a 32         jp     SHORT $L57247
  2936.   00065    d9 41 24     fld     DWORD PTR [ecx+36]
  2937.   00068    d9 42 24     fld     DWORD PTR [edx+36]
  2938.   0006b    da e9         fucompp
  2939.   0006d    df e0         fnstsw     ax
  2940.   0006f    f6 c4 44     test     ah, 68            ; 00000044H
  2941.   00072    7a 23         jp     SHORT $L57247
  2942.   00074    d9 41 28     fld     DWORD PTR [ecx+40]
  2943.   00077    d9 42 28     fld     DWORD PTR [edx+40]
  2944.   0007a    da e9         fucompp
  2945.   0007c    df e0         fnstsw     ax
  2946.   0007e    f6 c4 44     test     ah, 68            ; 00000044H
  2947.   00081    7a 14         jp     SHORT $L57247
  2948.   00083    d9 41 2c     fld     DWORD PTR [ecx+44]
  2949.   00086    d9 42 2c     fld     DWORD PTR [edx+44]
  2950.   00089    da e9         fucompp
  2951.   0008b    df e0         fnstsw     ax
  2952.   0008d    f6 c4 44     test     ah, 68            ; 00000044H
  2953.   00090    7a 05         jp     SHORT $L57247
  2954.   00092    33 c0         xor     eax, eax
  2955.   00094    40         inc     eax
  2956.  
  2957. ; 468  : }
  2958.  
  2959.   00095    5d         pop     ebp
  2960.   00096    c3         ret     0
  2961. $L57247:
  2962.  
  2963. ; 464  : 
  2964. ; 465  :     return (lv1.m_color == lv2.m_color) 
  2965. ; 466  :         && (lv1.m_uvTex1 == lv2.m_uvTex1)
  2966. ; 467  :         && (lv1.m_vNormal == lv2.m_vNormal);
  2967.  
  2968.   00097    33 c0         xor     eax, eax
  2969.  
  2970. ; 468  : }
  2971.  
  2972.   00099    5d         pop     ebp
  2973.   0009a    c3         ret     0
  2974. ?BEqualWedges@GXU@@YA_NAAUSLoadVertex@1@0@Z ENDP    ; GXU::BEqualWedges
  2975. _TEXT    ENDS
  2976. PUBLIC    ??$AddToDynamicArray@USLoadVertex@GXU@@@@YAHPAPAUSLoadVertex@GXU@@ABU01@PAK2@Z ; AddToDynamicArray<GXU::SLoadVertex>
  2977. EXTRN    __imp__HeapValidate@12:NEAR
  2978. EXTRN    __imp__GetProcessHeap@0:NEAR
  2979. ;    COMDAT xdata$x
  2980. xdata$x    SEGMENT
  2981. $T57298    DD    0ffffffffH
  2982.     DD    FLAT:$L57290
  2983.     DD    0ffffffffH
  2984.     DD    FLAT:$L57291
  2985. $T57293    DD    019930520H
  2986.     DD    02H
  2987.     DD    FLAT:$T57298
  2988.     DD    2 DUP(00H)
  2989.     DD    2 DUP(00H)
  2990. ; Function compile flags: /Ogs
  2991. xdata$x    ENDS
  2992. ;    COMDAT ??$AddToDynamicArray@USLoadVertex@GXU@@@@YAHPAPAUSLoadVertex@GXU@@ABU01@PAK2@Z
  2993. _TEXT    SEGMENT
  2994. _cNewMax$56955 = -24                    ; size = 4
  2995. $T57285 = -20                        ; size = 4
  2996. _pBase$ = -16                        ; size = 4
  2997. __$EHRec$ = -12                        ; size = 12
  2998. _ppBase$ = 8                        ; size = 4
  2999. _obj$ = 12                        ; size = 4
  3000. _i$56964 = 16                        ; size = 4
  3001. $T57286 = 16                        ; size = 4
  3002. $T57281 = 16                        ; size = 4
  3003. _pcNum$ = 16                        ; size = 4
  3004. _pcMax$ = 20                        ; size = 4
  3005. ??$AddToDynamicArray@USLoadVertex@GXU@@@@YAHPAPAUSLoadVertex@GXU@@ABU01@PAK2@Z PROC NEAR ; AddToDynamicArray<GXU::SLoadVertex>, COMDAT
  3006.  
  3007. ; 45   : {
  3008.  
  3009.   00000    b8 00 00 00 00     mov     eax, __ehhandler$??$AddToDynamicArray@USLoadVertex@GXU@@@@YAHPAPAUSLoadVertex@GXU@@ABU01@PAK2@Z
  3010.   00005    e8 00 00 00 00     call     __EH_prolog
  3011.   0000a    83 ec 0c     sub     esp, 12            ; 0000000cH
  3012.  
  3013. ; 46   :     T *pBase = *ppBase;
  3014.  
  3015.   0000d    8b 45 08     mov     eax, DWORD PTR _ppBase$[ebp]
  3016.   00010    8b 00         mov     eax, DWORD PTR [eax]
  3017.   00012    53         push     ebx
  3018.  
  3019. ; 47   :     if ( ! pBase )
  3020.  
  3021.   00013    8b 5d 10     mov     ebx, DWORD PTR _pcNum$[ebp]
  3022.   00016    56         push     esi
  3023.   00017    33 f6         xor     esi, esi
  3024.   00019    3b c6         cmp     eax, esi
  3025.   0001b    57         push     edi
  3026.   0001c    89 45 f0     mov     DWORD PTR _pBase$[ebp], eax
  3027.   0001f    75 4a         jne     SHORT $L57296
  3028.  
  3029. ; 48   :     {
  3030. ; 49   :         HeapValidate( GetProcessHeap(), 0, NULL );
  3031.  
  3032.   00021    56         push     esi
  3033.   00022    56         push     esi
  3034.   00023    ff 15 00 00 00
  3035.     00         call     DWORD PTR __imp__GetProcessHeap@0
  3036.   00029    50         push     eax
  3037.   0002a    ff 15 00 00 00
  3038.     00         call     DWORD PTR __imp__HeapValidate@12
  3039.  
  3040. ; 50   :         pBase = new T[2];
  3041.  
  3042.   00030    68 88 00 00 00     push     136            ; 00000088H
  3043.   00035    e8 00 00 00 00     call     ??2@YAPAXI@Z        ; operator new
  3044.   0003a    8b f8         mov     edi, eax
  3045.   0003c    59         pop     ecx
  3046.   0003d    89 7d 10     mov     DWORD PTR $T57281[ebp], edi
  3047.   00040    85 ff         test     edi, edi
  3048.   00042    6a 02         push     2
  3049.   00044    89 75 fc     mov     DWORD PTR __$EHRec$[ebp+8], esi
  3050.   00047    5e         pop     esi
  3051.   00048    74 10         je     SHORT $L57282
  3052.   0004a    68 00 00 00 00     push     OFFSET FLAT:??0SLoadVertex@GXU@@QAE@XZ
  3053.   0004f    56         push     esi
  3054.   00050    6a 44         push     68            ; 00000044H
  3055.   00052    57         push     edi
  3056.   00053    e8 00 00 00 00     call     ??_H@YGXPAXIHP6EPAX0@Z@Z
  3057.   00058    eb 02         jmp     SHORT $L57283
  3058. $L57282:
  3059.   0005a    33 ff         xor     edi, edi
  3060. $L57283:
  3061.   0005c    83 4d fc ff     or     DWORD PTR __$EHRec$[ebp+8], -1
  3062.  
  3063. ; 51   :         *pcNum = 0;
  3064. ; 52   :         *pcMax = 2;
  3065.  
  3066.   00060    8b 45 14     mov     eax, DWORD PTR _pcMax$[ebp]
  3067.   00063    83 23 00     and     DWORD PTR [ebx], 0
  3068.   00066    89 7d f0     mov     DWORD PTR _pBase$[ebp], edi
  3069.   00069    89 30         mov     DWORD PTR [eax], esi
  3070. $L57296:
  3071.  
  3072. ; 53   :     }
  3073. ; 54   :     if ( *pcNum == *pcMax )
  3074.  
  3075.   0006b    8b 45 14     mov     eax, DWORD PTR _pcMax$[ebp]
  3076.   0006e    8b 00         mov     eax, DWORD PTR [eax]
  3077.   00070    39 03         cmp     DWORD PTR [ebx], eax
  3078.   00072    0f 85 80 00 00
  3079.     00         jne     $L56954
  3080.  
  3081. ; 55   :     {
  3082. ; 56   :         DWORD cNewMax = *pcMax*2;
  3083.  
  3084.   00078    8d 34 00     lea     esi, DWORD PTR [eax+eax]
  3085.  
  3086. ; 57   :         T *newarr = new T[cNewMax];
  3087.  
  3088.   0007b    8b c6         mov     eax, esi
  3089.   0007d    6b c0 44     imul     eax, 68            ; 00000044H
  3090.   00080    50         push     eax
  3091.   00081    89 75 e8     mov     DWORD PTR _cNewMax$56955[ebp], esi
  3092.   00084    e8 00 00 00 00     call     ??2@YAPAXI@Z        ; operator new
  3093.   00089    8b f8         mov     edi, eax
  3094.   0008b    59         pop     ecx
  3095.   0008c    89 7d 10     mov     DWORD PTR $T57286[ebp], edi
  3096.   0008f    85 ff         test     edi, edi
  3097.   00091    c7 45 fc 01 00
  3098.     00 00         mov     DWORD PTR __$EHRec$[ebp+8], 1
  3099.   00098    74 13         je     SHORT $L57287
  3100.   0009a    68 00 00 00 00     push     OFFSET FLAT:??0SLoadVertex@GXU@@QAE@XZ
  3101.   0009f    56         push     esi
  3102.   000a0    6a 44         push     68            ; 00000044H
  3103.   000a2    57         push     edi
  3104.   000a3    e8 00 00 00 00     call     ??_H@YGXPAXIHP6EPAX0@Z@Z
  3105.   000a8    89 7d ec     mov     DWORD PTR $T57285[ebp], edi
  3106.   000ab    eb 04         jmp     SHORT $L57288
  3107. $L57287:
  3108.   000ad    83 65 ec 00     and     DWORD PTR $T57285[ebp], 0
  3109. $L57288:
  3110.  
  3111. ; 58   :         if ( ! newarr )
  3112.  
  3113.   000b1    8b 45 ec     mov     eax, DWORD PTR $T57285[ebp]
  3114.   000b4    83 4d fc ff     or     DWORD PTR __$EHRec$[ebp+8], -1
  3115.   000b8    85 c0         test     eax, eax
  3116.   000ba    74 59         je     SHORT $L56946
  3117. $L56963:
  3118.  
  3119. ; 59   :             return FALSE;
  3120. ; 60   :         for (DWORD i = 0; i < *pcNum; i++)
  3121.  
  3122.   000bc    83 65 10 00     and     DWORD PTR _i$56964[ebp], 0
  3123.   000c0    83 3b 00     cmp     DWORD PTR [ebx], 0
  3124.   000c3    76 1f         jbe     SHORT $L56967
  3125.   000c5    8b 55 f0     mov     edx, DWORD PTR _pBase$[ebp]
  3126.   000c8    2b d0         sub     edx, eax
  3127. $L56965:
  3128.   000ca    ff 45 10     inc     DWORD PTR _i$56964[ebp]
  3129.  
  3130. ; 61   :             newarr[i] = pBase[i];
  3131.  
  3132.   000cd    6a 11         push     17            ; 00000011H
  3133.   000cf    8d 34 02     lea     esi, DWORD PTR [edx+eax]
  3134.   000d2    8b f8         mov     edi, eax
  3135.   000d4    59         pop     ecx
  3136.   000d5    f3 a5         rep movsd
  3137.   000d7    8b 4d 10     mov     ecx, DWORD PTR _i$56964[ebp]
  3138.   000da    83 c0 44     add     eax, 68            ; 00000044H
  3139.   000dd    3b 0b         cmp     ecx, DWORD PTR [ebx]
  3140.   000df    72 e9         jb     SHORT $L56965
  3141.  
  3142. ; 59   :             return FALSE;
  3143. ; 60   :         for (DWORD i = 0; i < *pcNum; i++)
  3144.  
  3145.   000e1    8b 75 e8     mov     esi, DWORD PTR _cNewMax$56955[ebp]
  3146. $L56967:
  3147.  
  3148. ; 62   :         *pcMax = cNewMax;
  3149.  
  3150.   000e4    8b 45 14     mov     eax, DWORD PTR _pcMax$[ebp]
  3151.  
  3152. ; 63   :         delete []pBase;
  3153.  
  3154.   000e7    ff 75 f0     push     DWORD PTR _pBase$[ebp]
  3155.   000ea    89 30         mov     DWORD PTR [eax], esi
  3156.   000ec    e8 00 00 00 00     call     ??3@YAXPAX@Z        ; operator delete
  3157.  
  3158. ; 64   :         pBase = newarr;
  3159.  
  3160.   000f1    8b 45 ec     mov     eax, DWORD PTR $T57285[ebp]
  3161.   000f4    59         pop     ecx
  3162.   000f5    89 45 f0     mov     DWORD PTR _pBase$[ebp], eax
  3163. $L56954:
  3164.  
  3165. ; 65   :     }
  3166. ; 66   :     pBase[ (*pcNum)++ ] = obj;
  3167.  
  3168.   000f8    8b 3b         mov     edi, DWORD PTR [ebx]
  3169.   000fa    8b 75 0c     mov     esi, DWORD PTR _obj$[ebp]
  3170.   000fd    6b ff 44     imul     edi, 68            ; 00000044H
  3171.   00100    03 7d f0     add     edi, DWORD PTR _pBase$[ebp]
  3172.  
  3173. ; 67   :     *ppBase = pBase;
  3174.  
  3175.   00103    8b 45 f0     mov     eax, DWORD PTR _pBase$[ebp]
  3176.   00106    6a 11         push     17            ; 00000011H
  3177.   00108    59         pop     ecx
  3178.   00109    f3 a5         rep movsd
  3179.   0010b    ff 03         inc     DWORD PTR [ebx]
  3180.   0010d    8b 4d 08     mov     ecx, DWORD PTR _ppBase$[ebp]
  3181.   00110    89 01         mov     DWORD PTR [ecx], eax
  3182.  
  3183. ; 68   :     return TRUE;
  3184.  
  3185.   00112    33 c0         xor     eax, eax
  3186.   00114    40         inc     eax
  3187. $L56946:
  3188.  
  3189. ; 69   : }
  3190.  
  3191.   00115    8b 4d f4     mov     ecx, DWORD PTR __$EHRec$[ebp]
  3192.   00118    5f         pop     edi
  3193.   00119    5e         pop     esi
  3194.   0011a    5b         pop     ebx
  3195.   0011b    64 89 0d 00 00
  3196.     00 00         mov     DWORD PTR fs:__except_list, ecx
  3197.   00122    c9         leave
  3198.   00123    c3         ret     0
  3199. _TEXT    ENDS
  3200. ;    COMDAT text$x
  3201. text$x    SEGMENT
  3202. $L57290:
  3203.   00000    ff 75 10     push     DWORD PTR $T57281[ebp]
  3204.   00003    e8 00 00 00 00     call     ??3@YAXPAX@Z        ; operator delete
  3205.   00008    59         pop     ecx
  3206.   00009    c3         ret     0
  3207. $L57291:
  3208.   0000a    ff 75 10     push     DWORD PTR $T57286[ebp]
  3209.   0000d    e8 00 00 00 00     call     ??3@YAXPAX@Z        ; operator delete
  3210.   00012    59         pop     ecx
  3211.   00013    c3         ret     0
  3212. __ehhandler$??$AddToDynamicArray@USLoadVertex@GXU@@@@YAHPAPAUSLoadVertex@GXU@@ABU01@PAK2@Z:
  3213.   00014    b8 00 00 00 00     mov     eax, OFFSET FLAT:$T57293
  3214.   00019    e9 00 00 00 00     jmp     ___CxxFrameHandler
  3215. text$x    ENDS
  3216. ??$AddToDynamicArray@USLoadVertex@GXU@@@@YAHPAPAUSLoadVertex@GXU@@ABU01@PAK2@Z ENDP ; AddToDynamicArray<GXU::SLoadVertex>
  3217. PUBLIC    ?SetVertexColor@GXU@@YAJPAUSLoadedFace@1@KAAUD3DXCOLOR@@PAPAUSLoadVertex@1@PAK3@Z ; GXU::SetVertexColor
  3218. ; Function compile flags: /Ogs
  3219. ;    COMDAT ?SetVertexColor@GXU@@YAJPAUSLoadedFace@1@KAAUD3DXCOLOR@@PAPAUSLoadVertex@1@PAK3@Z
  3220. _TEXT    SEGMENT
  3221. _lvVertexNew$ = -72                    ; size = 68
  3222. _hr$ = -4                        ; size = 4
  3223. _pface$ = 8                        ; size = 4
  3224. tv225 = 12                        ; size = 4
  3225. _iPoint$ = 12                        ; size = 4
  3226. _color$ = 16                        ; size = 4
  3227. _prglvLoaded$ = 20                    ; size = 4
  3228. _pcVertices$ = 24                    ; size = 4
  3229. _pcVerticesMax$ = 28                    ; size = 4
  3230. ?SetVertexColor@GXU@@YAJPAUSLoadedFace@1@KAAUD3DXCOLOR@@PAPAUSLoadVertex@1@PAK3@Z PROC NEAR ; GXU::SetVertexColor, COMDAT
  3231.  
  3232. ; 149  : }
  3233.  
  3234.   00000    8b ff         npad     2
  3235.  
  3236. ; 78   : {
  3237.  
  3238.   00002    55         push     ebp
  3239.   00003    8b ec         mov     ebp, esp
  3240.   00005    83 ec 48     sub     esp, 72            ; 00000048H
  3241.  
  3242. ; 79   :     HRESULT hr = S_OK;
  3243. ; 80   :     SLoadVertex *plvVertex;
  3244. ; 81   :     SLoadVertex lvVertexNew;
  3245. ; 82   :     DWORD iVertex;
  3246. ; 83   :     DWORD iVertexNew;
  3247. ; 84   :     DWORD wCur;
  3248. ; 85   :     DWORD wHead;
  3249. ; 86   :     SLoadVertex *plvCur;
  3250. ; 87   : 
  3251. ; 88   :     GXASSERT(pface != NULL && prglvLoaded != NULL && pcVertices != NULL && pcVerticesMax != NULL);
  3252. ; 89   : 
  3253. ; 90   :     iVertex = pface->m_wIndices[iPoint];
  3254.  
  3255.   00008    8b 45 0c     mov     eax, DWORD PTR _iPoint$[ebp]
  3256.   0000b    8b 4d 08     mov     ecx, DWORD PTR _pface$[ebp]
  3257.   0000e    83 65 fc 00     and     DWORD PTR _hr$[ebp], 0
  3258.   00012    8d 04 81     lea     eax, DWORD PTR [ecx+eax*4]
  3259.  
  3260. ; 91   :     GXASSERT(iVertex < *pcVertices);
  3261. ; 92   : 
  3262. ; 93   :     plvVertex = &(*prglvLoaded)[iVertex];
  3263.  
  3264.   00015    8b 4d 14     mov     ecx, DWORD PTR _prglvLoaded$[ebp]
  3265.   00018    8b 09         mov     ecx, DWORD PTR [ecx]
  3266.   0001a    89 45 0c     mov     DWORD PTR tv225[ebp], eax
  3267.   0001d    8b 00         mov     eax, DWORD PTR [eax]
  3268.   0001f    6b c0 44     imul     eax, 68            ; 00000044H
  3269.   00022    8d 14 08     lea     edx, DWORD PTR [eax+ecx]
  3270.  
  3271. ; 94   : 
  3272. ; 95   :     // if the vertex is not currently owned, take ownership
  3273. ; 96   :     if (!plvVertex->m_bOwned)
  3274.  
  3275.   00025    80 7a 38 00     cmp     BYTE PTR [edx+56], 0
  3276.   00029    56         push     esi
  3277.   0002a    57         push     edi
  3278.   0002b    75 13         jne     SHORT $L56403
  3279.  
  3280. ; 97   :     {
  3281. ; 98   :         plvVertex->m_bOwned = true;
  3282. ; 99   :         plvVertex->m_color = color;
  3283.  
  3284.   0002d    8b 75 10     mov     esi, DWORD PTR _color$[ebp]
  3285.   00030    c6 42 38 01     mov     BYTE PTR [edx+56], 1
  3286.   00034    8d 7a 0c     lea     edi, DWORD PTR [edx+12]
  3287.   00037    a5         movsd
  3288.   00038    a5         movsd
  3289.   00039    a5         movsd
  3290.   0003a    a5         movsd
  3291.  
  3292. ; 100  :     }
  3293. ; 101  :     // else if the vertex is owned but the color is not the same 
  3294. ; 102  :     //   NOTE: if the same, then just ignore the fact that the color was being set
  3295. ; 103  :     else if (plvVertex->m_color != color)
  3296.  
  3297.   0003b    e9 f7 00 00 00     jmp     $e_Exit$56411
  3298. $L56403:
  3299.   00040    53         push     ebx
  3300.   00041    8b 5d 10     mov     ebx, DWORD PTR _color$[ebp]
  3301.   00044    d9 03         fld     DWORD PTR [ebx]
  3302.   00046    d9 42 0c     fld     DWORD PTR [edx+12]
  3303.   00049    da e9         fucompp
  3304.   0004b    df e0         fnstsw     ax
  3305.   0004d    f6 c4 44     test     ah, 68            ; 00000044H
  3306.   00050    7a 31         jp     SHORT $L57330
  3307.   00052    d9 43 04     fld     DWORD PTR [ebx+4]
  3308.   00055    d9 42 10     fld     DWORD PTR [edx+16]
  3309.   00058    da e9         fucompp
  3310.   0005a    df e0         fnstsw     ax
  3311.   0005c    f6 c4 44     test     ah, 68            ; 00000044H
  3312.   0005f    7a 22         jp     SHORT $L57330
  3313.   00061    d9 43 08     fld     DWORD PTR [ebx+8]
  3314.   00064    d9 42 14     fld     DWORD PTR [edx+20]
  3315.   00067    da e9         fucompp
  3316.   00069    df e0         fnstsw     ax
  3317.   0006b    f6 c4 44     test     ah, 68            ; 00000044H
  3318.   0006e    7a 13         jp     SHORT $L57330
  3319.   00070    d9 43 0c     fld     DWORD PTR [ebx+12]
  3320.   00073    d9 42 18     fld     DWORD PTR [edx+24]
  3321.   00076    da e9         fucompp
  3322.   00078    df e0         fnstsw     ax
  3323.   0007a    f6 c4 44     test     ah, 68            ; 00000044H
  3324.   0007d    0f 8b b3 00 00
  3325.     00         jnp     $L57346
  3326. $L57330:
  3327.  
  3328. ; 104  :     {
  3329. ; 105  :         lvVertexNew = *plvVertex;
  3330. ; 106  :         GXASSERT(lvVertexNew.m_bOwned);
  3331. ; 107  : 
  3332. ; 108  :         // UNDONE - this is currently rechecking the first vertex, might be possible
  3333. ; 109  :         //   to skip depending on sematics of the mesh file
  3334. ; 110  :         wHead = iVertex;
  3335. ; 111  :         wCur = wHead;
  3336.  
  3337.   00083    8b 45 0c     mov     eax, DWORD PTR tv225[ebp]
  3338.   00086    6a 11         push     17            ; 00000011H
  3339.   00088    59         pop     ecx
  3340.   00089    8b f2         mov     esi, edx
  3341.   0008b    8d 7d b8     lea     edi, DWORD PTR _lvVertexNew$[ebp]
  3342.   0008e    f3 a5         rep movsd
  3343.   00090    8b 38         mov     edi, DWORD PTR [eax]
  3344.   00092    8b f7         mov     esi, edi
  3345. $L56407:
  3346.  
  3347. ; 112  :         do
  3348. ; 113  :         {
  3349. ; 114  :             plvCur = &( (*prglvLoaded)[wCur] );
  3350. ; 115  : 
  3351. ; 116  :             if (plvCur->m_color == color)
  3352.  
  3353.   00094    8b 45 14     mov     eax, DWORD PTR _prglvLoaded$[ebp]
  3354.   00097    d9 03         fld     DWORD PTR [ebx]
  3355.   00099    8b 00         mov     eax, DWORD PTR [eax]
  3356.   0009b    8b ce         mov     ecx, esi
  3357.   0009d    6b c9 44     imul     ecx, 68            ; 00000044H
  3358.   000a0    03 c8         add     ecx, eax
  3359.   000a2    d9 41 0c     fld     DWORD PTR [ecx+12]
  3360.   000a5    da e9         fucompp
  3361.   000a7    df e0         fnstsw     ax
  3362.   000a9    f6 c4 44     test     ah, 68            ; 00000044H
  3363.   000ac    7a 2d         jp     SHORT $L57338
  3364.   000ae    d9 43 04     fld     DWORD PTR [ebx+4]
  3365.   000b1    d9 41 10     fld     DWORD PTR [ecx+16]
  3366.   000b4    da e9         fucompp
  3367.   000b6    df e0         fnstsw     ax
  3368.   000b8    f6 c4 44     test     ah, 68            ; 00000044H
  3369.   000bb    7a 1e         jp     SHORT $L57338
  3370.   000bd    d9 43 08     fld     DWORD PTR [ebx+8]
  3371.   000c0    d9 41 14     fld     DWORD PTR [ecx+20]
  3372.   000c3    da e9         fucompp
  3373.   000c5    df e0         fnstsw     ax
  3374.   000c7    f6 c4 44     test     ah, 68            ; 00000044H
  3375.   000ca    7a 0f         jp     SHORT $L57338
  3376.   000cc    d9 43 0c     fld     DWORD PTR [ebx+12]
  3377.   000cf    d9 41 18     fld     DWORD PTR [ecx+24]
  3378.   000d2    da e9         fucompp
  3379.   000d4    df e0         fnstsw     ax
  3380.   000d6    f6 c4 44     test     ah, 68            ; 00000044H
  3381.   000d9    7b 56         jnp     SHORT $L57344
  3382. $L57338:
  3383.  
  3384. ; 117  :             {
  3385. ; 118  :                 // found an equivalent wedge, just point at it
  3386. ; 119  :                 pface->m_wIndices[iPoint] = wCur;
  3387. ; 120  :                 goto e_Exit;
  3388. ; 121  :             }
  3389. ; 122  : 
  3390. ; 123  :             // go to next wedge in the vertex
  3391. ; 124  :             wCur = (*prglvLoaded)[wCur].m_wPointList;
  3392.  
  3393.   000db    8b 71 34     mov     esi, DWORD PTR [ecx+52]
  3394.  
  3395. ; 125  :         } while (wCur != wHead);
  3396.  
  3397.   000de    3b f7         cmp     esi, edi
  3398.   000e0    75 b2         jne     SHORT $L56407
  3399.  
  3400. ; 126  : 
  3401. ; 127  :         // set both the color and the representative point to create a new vertex that is 
  3402. ; 128  :         //   logically the same in the mesh, but has a different color attribute
  3403. ; 129  :         lvVertexNew.m_color = color;
  3404. ; 130  :         lvVertexNew.m_wPointRep = (*prglvLoaded)[iVertex].m_wPointRep;
  3405. ; 131  : 
  3406. ; 132  :         iVertexNew = (DWORD)*pcVertices;
  3407. ; 133  : 
  3408. ; 134  :         if ( ! AddToDynamicArray( prglvLoaded, lvVertexNew, pcVertices, pcVerticesMax ) )
  3409.  
  3410.   000e2    ff 75 1c     push     DWORD PTR _pcVerticesMax$[ebp]
  3411.   000e5    8b 45 18     mov     eax, DWORD PTR _pcVertices$[ebp]
  3412.   000e8    8b f3         mov     esi, ebx
  3413.   000ea    8b 5a 30     mov     ebx, DWORD PTR [edx+48]
  3414.   000ed    8d 7d c4     lea     edi, DWORD PTR _lvVertexNew$[ebp+12]
  3415.   000f0    a5         movsd
  3416.   000f1    a5         movsd
  3417.   000f2    a5         movsd
  3418.   000f3    a5         movsd
  3419.   000f4    8b 30         mov     esi, DWORD PTR [eax]
  3420.   000f6    8b 7d 14     mov     edi, DWORD PTR _prglvLoaded$[ebp]
  3421.   000f9    50         push     eax
  3422.   000fa    8d 45 b8     lea     eax, DWORD PTR _lvVertexNew$[ebp]
  3423.   000fd    50         push     eax
  3424.   000fe    57         push     edi
  3425.   000ff    89 5d e8     mov     DWORD PTR _lvVertexNew$[ebp+48], ebx
  3426.   00102    e8 00 00 00 00     call     ??$AddToDynamicArray@USLoadVertex@GXU@@@@YAHPAPAUSLoadVertex@GXU@@ABU01@PAK2@Z ; AddToDynamicArray<GXU::SLoadVertex>
  3427.   00107    83 c4 10     add     esp, 16            ; 00000010H
  3428.   0010a    85 c0         test     eax, eax
  3429.   0010c    75 09         jne     SHORT $L56421
  3430.  
  3431. ; 135  :         {
  3432. ; 136  :             hr = E_OUTOFMEMORY;
  3433.  
  3434.   0010e    c7 45 fc 0e 00
  3435.     07 80         mov     DWORD PTR _hr$[ebp], -2147024882 ; 8007000eH
  3436.  
  3437. ; 145  :     }
  3438. ; 146  : 
  3439. ; 147  : e_Exit:
  3440.  
  3441.   00115    eb 1f         jmp     SHORT $L57346
  3442. $L56421:
  3443.  
  3444. ; 137  :             goto e_Exit;
  3445. ; 138  :         }
  3446. ; 139  : 
  3447. ; 140  :         (*prglvLoaded)[iVertexNew].m_wPointList = (*prglvLoaded)[lvVertexNew.m_wPointRep].m_wPointList;
  3448.  
  3449.   00117    8b 0f         mov     ecx, DWORD PTR [edi]
  3450.   00119    8b c3         mov     eax, ebx
  3451.   0011b    6b c0 44     imul     eax, 68            ; 00000044H
  3452.   0011e    8b 5c 08 34     mov     ebx, DWORD PTR [eax+ecx+52]
  3453.   00122    8b d6         mov     edx, esi
  3454.   00124    6b d2 44     imul     edx, 68            ; 00000044H
  3455.   00127    89 5c 0a 34     mov     DWORD PTR [edx+ecx+52], ebx
  3456.  
  3457. ; 141  :         (*prglvLoaded)[lvVertexNew.m_wPointRep].m_wPointList = iVertexNew;
  3458.  
  3459.   0012b    8b 0f         mov     ecx, DWORD PTR [edi]
  3460.   0012d    89 74 01 34     mov     DWORD PTR [ecx+eax+52], esi
  3461. $L57344:
  3462.  
  3463. ; 142  : 
  3464. ; 143  :         // now update the face to refer to the new point with the correct attributes
  3465. ; 144  :         pface->m_wIndices[iPoint] = iVertexNew;
  3466.  
  3467.   00131    8b 45 0c     mov     eax, DWORD PTR tv225[ebp]
  3468.   00134    89 30         mov     DWORD PTR [eax], esi
  3469. $L57346:
  3470.   00136    5b         pop     ebx
  3471. $e_Exit$56411:
  3472.  
  3473. ; 148  :     return hr;
  3474.  
  3475.   00137    8b 45 fc     mov     eax, DWORD PTR _hr$[ebp]
  3476.   0013a    5f         pop     edi
  3477.   0013b    5e         pop     esi
  3478.  
  3479. ; 149  : }
  3480.  
  3481.   0013c    c9         leave
  3482.   0013d    c3         ret     0
  3483. ?SetVertexColor@GXU@@YAJPAUSLoadedFace@1@KAAUD3DXCOLOR@@PAPAUSLoadVertex@1@PAK3@Z ENDP ; GXU::SetVertexColor
  3484. _TEXT    ENDS
  3485. PUBLIC    ?SetVertexAttributes@GXU@@YAJPAUSLoadedFace@1@KPAUD3DXVECTOR3@@PAUD3DXVECTOR2@@PAPAUSLoadVertex@1@PAK4@Z ; GXU::SetVertexAttributes
  3486. ; Function compile flags: /Ogs
  3487. ;    COMDAT ?SetVertexAttributes@GXU@@YAJPAUSLoadedFace@1@KPAUD3DXVECTOR3@@PAUD3DXVECTOR2@@PAPAUSLoadVertex@1@PAK4@Z
  3488. _TEXT    SEGMENT
  3489. _lvVertexNew$ = -76                    ; size = 68
  3490. _hr$ = -8                        ; size = 4
  3491. tv225 = -4                        ; size = 4
  3492. _iVertex$ = 8                        ; size = 4
  3493. _pface$ = 8                        ; size = 4
  3494. _wCur$ = 12                        ; size = 4
  3495. _iPoint$ = 12                        ; size = 4
  3496. _pvNormal$ = 16                        ; size = 4
  3497. _puvTex1$ = 20                        ; size = 4
  3498. tv281 = 24                        ; size = 4
  3499. _prglvLoaded$ = 24                    ; size = 4
  3500. _pcVertices$ = 28                    ; size = 4
  3501. _pcVerticesMax$ = 32                    ; size = 4
  3502. ?SetVertexAttributes@GXU@@YAJPAUSLoadedFace@1@KPAUD3DXVECTOR3@@PAUD3DXVECTOR2@@PAPAUSLoadVertex@1@PAK4@Z PROC NEAR ; GXU::SetVertexAttributes, COMDAT
  3503.  
  3504. ; 238  : }
  3505.  
  3506.   00000    8b ff         npad     2
  3507.  
  3508. ; 153  : {
  3509.  
  3510.   00002    55         push     ebp
  3511.   00003    8b ec         mov     ebp, esp
  3512.   00005    83 ec 4c     sub     esp, 76            ; 0000004cH
  3513.  
  3514. ; 154  :     HRESULT hr = S_OK;
  3515. ; 155  :     SLoadVertex *plvVertex;
  3516. ; 156  :     SLoadVertex lvVertexNew;
  3517. ; 157  :     DWORD iVertex;
  3518. ; 158  :     DWORD iVertexNew;
  3519. ; 159  :     DWORD wCur;
  3520. ; 160  :     DWORD wHead;
  3521. ; 161  :     SLoadVertex *plvCur;
  3522. ; 162  : 
  3523. ; 163  :     GXASSERT(pface != NULL && prglvLoaded != NULL && pcVertices != NULL && pcVerticesMax != NULL);
  3524. ; 164  : 
  3525. ; 165  :     iVertex = pface->m_wIndices[iPoint];
  3526.  
  3527.   00008    8b 4d 08     mov     ecx, DWORD PTR _pface$[ebp]
  3528.   0000b    8b 45 0c     mov     eax, DWORD PTR _iPoint$[ebp]
  3529.   0000e    83 65 f8 00     and     DWORD PTR _hr$[ebp], 0
  3530.   00012    8d 04 81     lea     eax, DWORD PTR [ecx+eax*4]
  3531.   00015    53         push     ebx
  3532.   00016    89 45 fc     mov     DWORD PTR tv225[ebp], eax
  3533.   00019    8b 00         mov     eax, DWORD PTR [eax]
  3534.  
  3535. ; 166  :     GXASSERT(iVertex < *pcVertices);
  3536. ; 167  : 
  3537. ; 168  :     plvVertex = &(*prglvLoaded)[iVertex];
  3538.  
  3539.   0001b    8b d8         mov     ebx, eax
  3540.   0001d    6b db 44     imul     ebx, 68            ; 00000044H
  3541.   00020    89 45 08     mov     DWORD PTR _iVertex$[ebp], eax
  3542.   00023    8b 45 18     mov     eax, DWORD PTR _prglvLoaded$[ebp]
  3543.   00026    8b 10         mov     edx, DWORD PTR [eax]
  3544.   00028    03 d3         add     edx, ebx
  3545.  
  3546. ; 169  : 
  3547. ; 170  :     // UNDONE craigp - It might be useful to search all instances of a logical vertex
  3548. ; 171  :     //   in order to find another one to share with
  3549. ; 172  : 
  3550. ; 173  :     // if the vertex is not currently owned, take ownership
  3551. ; 174  :     if (!plvVertex->m_bOwned)
  3552.  
  3553.   0002a    80 7a 38 00     cmp     BYTE PTR [edx+56], 0
  3554.   0002e    56         push     esi
  3555.   0002f    57         push     edi
  3556.   00030    75 2c         jne     SHORT $L56446
  3557.  
  3558. ; 175  :     {
  3559. ; 176  :         plvVertex->m_bOwned = true;
  3560. ; 177  : 
  3561. ; 178  :         if (pvNormal != NULL)
  3562.  
  3563.   00032    8b 75 10     mov     esi, DWORD PTR _pvNormal$[ebp]
  3564.   00035    85 f6         test     esi, esi
  3565.   00037    c6 42 38 01     mov     BYTE PTR [edx+56], 1
  3566.   0003b    74 06         je     SHORT $L56447
  3567.  
  3568. ; 179  :             plvVertex->m_vNormal = *pvNormal;
  3569.  
  3570.   0003d    8d 7a 24     lea     edi, DWORD PTR [edx+36]
  3571.   00040    a5         movsd
  3572.   00041    a5         movsd
  3573.   00042    a5         movsd
  3574. $L56447:
  3575.  
  3576. ; 180  : 
  3577. ; 181  :         if (puvTex1 != NULL)
  3578.  
  3579.   00043    8b 45 14     mov     eax, DWORD PTR _puvTex1$[ebp]
  3580.   00046    85 c0         test     eax, eax
  3581.   00048    0f 84 25 01 00
  3582.     00         je     $e_Exit$56460
  3583.  
  3584. ; 182  :             plvVertex->m_uvTex1 = *puvTex1;
  3585.  
  3586.   0004e    8b 08         mov     ecx, DWORD PTR [eax]
  3587.   00050    89 4a 1c     mov     DWORD PTR [edx+28], ecx
  3588.   00053    8b 40 04     mov     eax, DWORD PTR [eax+4]
  3589.   00056    89 42 20     mov     DWORD PTR [edx+32], eax
  3590.  
  3591. ; 183  :     }
  3592. ; 184  :     else if (((pvNormal != NULL) && (plvVertex->m_vNormal != *pvNormal))
  3593.  
  3594.   00059    e9 15 01 00 00     jmp     $e_Exit$56460
  3595. $L56446:
  3596.  
  3597. ; 185  :             || ((puvTex1 != NULL) && (plvVertex->m_uvTex1 != *puvTex1)))
  3598.  
  3599.   0005e    8b 4d 10     mov     ecx, DWORD PTR _pvNormal$[ebp]
  3600.   00061    85 c9         test     ecx, ecx
  3601.   00063    74 2c         je     SHORT $L56452
  3602.   00065    d9 01         fld     DWORD PTR [ecx]
  3603.   00067    d9 42 24     fld     DWORD PTR [edx+36]
  3604.   0006a    da e9         fucompp
  3605.   0006c    df e0         fnstsw     ax
  3606.   0006e    f6 c4 44     test     ah, 68            ; 00000044H
  3607.   00071    7a 4a         jp     SHORT $L57383
  3608.   00073    d9 41 04     fld     DWORD PTR [ecx+4]
  3609.   00076    d9 42 28     fld     DWORD PTR [edx+40]
  3610.   00079    da e9         fucompp
  3611.   0007b    df e0         fnstsw     ax
  3612.   0007d    f6 c4 44     test     ah, 68            ; 00000044H
  3613.   00080    7a 3b         jp     SHORT $L57383
  3614.   00082    d9 41 08     fld     DWORD PTR [ecx+8]
  3615.   00085    d9 42 2c     fld     DWORD PTR [edx+44]
  3616.   00088    da e9         fucompp
  3617.   0008a    df e0         fnstsw     ax
  3618.   0008c    f6 c4 44     test     ah, 68            ; 00000044H
  3619.   0008f    7a 2c         jp     SHORT $L57383
  3620. $L56452:
  3621.   00091    8b 4d 14     mov     ecx, DWORD PTR _puvTex1$[ebp]
  3622.   00094    85 c9         test     ecx, ecx
  3623.   00096    0f 84 d7 00 00
  3624.     00         je     $e_Exit$56460
  3625.   0009c    d9 01         fld     DWORD PTR [ecx]
  3626.   0009e    d9 42 1c     fld     DWORD PTR [edx+28]
  3627.   000a1    da e9         fucompp
  3628.   000a3    df e0         fnstsw     ax
  3629.   000a5    f6 c4 44     test     ah, 68            ; 00000044H
  3630.   000a8    7a 13         jp     SHORT $L57383
  3631.   000aa    d9 41 04     fld     DWORD PTR [ecx+4]
  3632.   000ad    d9 42 20     fld     DWORD PTR [edx+32]
  3633.   000b0    da e9         fucompp
  3634.   000b2    df e0         fnstsw     ax
  3635.   000b4    f6 c4 44     test     ah, 68            ; 00000044H
  3636.   000b7    0f 8b b6 00 00
  3637.     00         jnp     $e_Exit$56460
  3638. $L57383:
  3639.  
  3640. ; 186  :     {
  3641. ; 187  :         lvVertexNew = *plvVertex;
  3642.  
  3643.   000bd    6a 11         push     17            ; 00000011H
  3644.   000bf    59         pop     ecx
  3645.   000c0    8b f2         mov     esi, edx
  3646.   000c2    8d 7d b4     lea     edi, DWORD PTR _lvVertexNew$[ebp]
  3647.   000c5    f3 a5         rep movsd
  3648.  
  3649. ; 188  :         GXASSERT(lvVertexNew.m_bOwned);
  3650. ; 189  : 
  3651. ; 190  :         // set both the attributes and the representative point to create a new vertex that is 
  3652. ; 191  :         //   logically the same in the mesh, but has a different vertex attributes
  3653. ; 192  : 
  3654. ; 193  :         if (pvNormal != NULL)
  3655.  
  3656.   000c7    8b 75 10     mov     esi, DWORD PTR _pvNormal$[ebp]
  3657.   000ca    85 f6         test     esi, esi
  3658.   000cc    74 06         je     SHORT $L56454
  3659.  
  3660. ; 194  :             lvVertexNew.m_vNormal = *pvNormal;
  3661.  
  3662.   000ce    8d 7d d8     lea     edi, DWORD PTR _lvVertexNew$[ebp+36]
  3663.   000d1    a5         movsd
  3664.   000d2    a5         movsd
  3665.   000d3    a5         movsd
  3666. $L56454:
  3667.  
  3668. ; 195  : 
  3669. ; 196  :         if (puvTex1 != NULL)
  3670.  
  3671.   000d4    8b 45 14     mov     eax, DWORD PTR _puvTex1$[ebp]
  3672.   000d7    85 c0         test     eax, eax
  3673.   000d9    74 0b         je     SHORT $L56455
  3674.  
  3675. ; 197  :             plvVertex->m_uvTex1 = *puvTex1;
  3676.  
  3677.   000db    8b 08         mov     ecx, DWORD PTR [eax]
  3678.   000dd    89 4a 1c     mov     DWORD PTR [edx+28], ecx
  3679.   000e0    8b 40 04     mov     eax, DWORD PTR [eax+4]
  3680.   000e3    89 42 20     mov     DWORD PTR [edx+32], eax
  3681. $L56455:
  3682.  
  3683. ; 198  : 
  3684. ; 199  :         // UNDONE - this is currently rechecking the first vertex, might be possible
  3685. ; 200  :         //   to skip depending on sematics of the mesh file
  3686. ; 201  :         wHead = iVertex;
  3687. ; 202  :         wCur = wHead;
  3688.  
  3689.   000e6    8b 45 08     mov     eax, DWORD PTR _iVertex$[ebp]
  3690.   000e9    8b 7d 18     mov     edi, DWORD PTR _prglvLoaded$[ebp]
  3691.   000ec    8b 37         mov     esi, DWORD PTR [edi]
  3692.   000ee    89 45 0c     mov     DWORD PTR _wCur$[ebp], eax
  3693. $L56456:
  3694.  
  3695. ; 203  :         do
  3696. ; 204  :         {
  3697. ; 205  :             plvCur = &( (*prglvLoaded)[wCur] );
  3698.  
  3699.   000f1    8b 45 0c     mov     eax, DWORD PTR _wCur$[ebp]
  3700.   000f4    6b c0 44     imul     eax, 68            ; 00000044H
  3701.   000f7    03 c6         add     eax, esi
  3702.  
  3703. ; 206  : 
  3704. ; 207  :             if (plvCur->m_bOwned && BEqualWedges(*plvCur, lvVertexNew))
  3705.  
  3706.   000f9    80 78 38 00     cmp     BYTE PTR [eax+56], 0
  3707.   000fd    89 45 18     mov     DWORD PTR tv281[ebp], eax
  3708.   00100    74 13         je     SHORT $L56459
  3709.   00102    8d 4d b4     lea     ecx, DWORD PTR _lvVertexNew$[ebp]
  3710.   00105    51         push     ecx
  3711.   00106    50         push     eax
  3712.   00107    e8 00 00 00 00     call     ?BEqualWedges@GXU@@YA_NAAUSLoadVertex@1@0@Z ; GXU::BEqualWedges
  3713.   0010c    84 c0         test     al, al
  3714.   0010e    59         pop     ecx
  3715.   0010f    59         pop     ecx
  3716.   00110    75 38         jne     SHORT $L57388
  3717.   00112    8b 45 18     mov     eax, DWORD PTR tv281[ebp]
  3718. $L56459:
  3719.  
  3720. ; 212  :             }
  3721. ; 213  : 
  3722. ; 214  :             // go to next wedge in the vertex
  3723. ; 215  :             wCur = (*prglvLoaded)[wCur].m_wPointList;
  3724.  
  3725.   00115    8b 40 34     mov     eax, DWORD PTR [eax+52]
  3726.  
  3727. ; 216  :         } while (wCur != wHead);
  3728.  
  3729.   00118    3b 45 08     cmp     eax, DWORD PTR _iVertex$[ebp]
  3730.   0011b    89 45 0c     mov     DWORD PTR _wCur$[ebp], eax
  3731.   0011e    75 d1         jne     SHORT $L56456
  3732.  
  3733. ; 217  : 
  3734. ; 218  :         lvVertexNew.m_wPointRep = (*prglvLoaded)[iVertex].m_wPointRep;
  3735. ; 219  : 
  3736. ; 220  :         iVertexNew = (DWORD)*pcVertices;
  3737. ; 221  : 
  3738. ; 222  :         if ( ! AddToDynamicArray( prglvLoaded, lvVertexNew, pcVertices, pcVerticesMax ) )
  3739.  
  3740.   00120    ff 75 20     push     DWORD PTR _pcVerticesMax$[ebp]
  3741.   00123    8b 45 1c     mov     eax, DWORD PTR _pcVertices$[ebp]
  3742.   00126    8b 5c 1e 30     mov     ebx, DWORD PTR [esi+ebx+48]
  3743.   0012a    8b 30         mov     esi, DWORD PTR [eax]
  3744.   0012c    50         push     eax
  3745.   0012d    8d 45 b4     lea     eax, DWORD PTR _lvVertexNew$[ebp]
  3746.   00130    50         push     eax
  3747.   00131    57         push     edi
  3748.   00132    89 5d e4     mov     DWORD PTR _lvVertexNew$[ebp+48], ebx
  3749.   00135    e8 00 00 00 00     call     ??$AddToDynamicArray@USLoadVertex@GXU@@@@YAHPAPAUSLoadVertex@GXU@@ABU01@PAK2@Z ; AddToDynamicArray<GXU::SLoadVertex>
  3750.   0013a    83 c4 10     add     esp, 16            ; 00000010H
  3751.   0013d    85 c0         test     eax, eax
  3752.   0013f    75 13         jne     SHORT $L56463
  3753.  
  3754. ; 223  :         {
  3755. ; 224  :             hr = E_OUTOFMEMORY;
  3756.  
  3757.   00141    c7 45 f8 0e 00
  3758.     07 80         mov     DWORD PTR _hr$[ebp], -2147024882 ; 8007000eH
  3759.  
  3760. ; 234  :     }
  3761. ; 235  : 
  3762. ; 236  : e_Exit:
  3763.  
  3764.   00148    eb 29         jmp     SHORT $e_Exit$56460
  3765. $L57388:
  3766.  
  3767. ; 208  :             {
  3768. ; 209  :                 // found an equivalent wedge, just point at it
  3769. ; 210  :                 pface->m_wIndices[iPoint] = wCur;
  3770.  
  3771.   0014a    8b 45 fc     mov     eax, DWORD PTR tv225[ebp]
  3772.   0014d    8b 4d 0c     mov     ecx, DWORD PTR _wCur$[ebp]
  3773.   00150    89 08         mov     DWORD PTR [eax], ecx
  3774.  
  3775. ; 211  :                 goto e_Exit;
  3776.  
  3777.   00152    eb 1f         jmp     SHORT $e_Exit$56460
  3778. $L56463:
  3779.  
  3780. ; 225  :             goto e_Exit;
  3781. ; 226  :         }
  3782. ; 227  : 
  3783. ; 228  :         // link the vertex in to the vertex list
  3784. ; 229  :         (*prglvLoaded)[iVertexNew].m_wPointList = (*prglvLoaded)[lvVertexNew.m_wPointRep].m_wPointList;
  3785.  
  3786.   00154    8b 0f         mov     ecx, DWORD PTR [edi]
  3787.   00156    8b c3         mov     eax, ebx
  3788.   00158    6b c0 44     imul     eax, 68            ; 00000044H
  3789.   0015b    8b 5c 08 34     mov     ebx, DWORD PTR [eax+ecx+52]
  3790.   0015f    8b d6         mov     edx, esi
  3791.   00161    6b d2 44     imul     edx, 68            ; 00000044H
  3792.   00164    89 5c 0a 34     mov     DWORD PTR [edx+ecx+52], ebx
  3793.  
  3794. ; 230  :         (*prglvLoaded)[lvVertexNew.m_wPointRep].m_wPointList = iVertexNew;
  3795.  
  3796.   00168    8b 0f         mov     ecx, DWORD PTR [edi]
  3797.   0016a    89 74 01 34     mov     DWORD PTR [ecx+eax+52], esi
  3798.  
  3799. ; 231  : 
  3800. ; 232  :         // now update the face to refer to the new point with the correct attributes
  3801. ; 233  :         pface->m_wIndices[iPoint] = iVertexNew;
  3802.  
  3803.   0016e    8b 45 fc     mov     eax, DWORD PTR tv225[ebp]
  3804.   00171    89 30         mov     DWORD PTR [eax], esi
  3805. $e_Exit$56460:
  3806.  
  3807. ; 237  :     return hr;
  3808.  
  3809.   00173    8b 45 f8     mov     eax, DWORD PTR _hr$[ebp]
  3810.   00176    5f         pop     edi
  3811.   00177    5e         pop     esi
  3812.   00178    5b         pop     ebx
  3813.  
  3814. ; 238  : }
  3815.  
  3816.   00179    c9         leave
  3817.   0017a    c3         ret     0
  3818. ?SetVertexAttributes@GXU@@YAJPAUSLoadedFace@1@KPAUD3DXVECTOR3@@PAUD3DXVECTOR2@@PAPAUSLoadVertex@1@PAK4@Z ENDP ; GXU::SetVertexAttributes
  3819. _TEXT    ENDS
  3820. PUBLIC    ?SetSmoothingGroup@GXU@@YAJPAUSLoadedFace@1@KGAAUD3DXVECTOR3@@PAPAUSLoadVertex@1@PAK3@Z ; GXU::SetSmoothingGroup
  3821. ; Function compile flags: /Ogs
  3822. ;    COMDAT ?SetSmoothingGroup@GXU@@YAJPAUSLoadedFace@1@KGAAUD3DXVECTOR3@@PAPAUSLoadVertex@1@PAK3@Z
  3823. _TEXT    SEGMENT
  3824. _lvVertexNew$ = -72                    ; size = 68
  3825. _hr$ = -4                        ; size = 4
  3826. _pface$ = 8                        ; size = 4
  3827. tv257 = 12                        ; size = 4
  3828. _iPoint$ = 12                        ; size = 4
  3829. _iSmoothingGroup$ = 16                    ; size = 2
  3830. _vNormal$ = 20                        ; size = 4
  3831. _prglvLoaded$ = 24                    ; size = 4
  3832. _pcVertices$ = 28                    ; size = 4
  3833. _pcVerticesMax$ = 32                    ; size = 4
  3834. ?SetSmoothingGroup@GXU@@YAJPAUSLoadedFace@1@KGAAUD3DXVECTOR3@@PAPAUSLoadVertex@1@PAK3@Z PROC NEAR ; GXU::SetSmoothingGroup, COMDAT
  3835.  
  3836. ; 355  : }
  3837.  
  3838.   00000    8b ff         npad     2
  3839.  
  3840. ; 242  : {
  3841.  
  3842.   00002    55         push     ebp
  3843.   00003    8b ec         mov     ebp, esp
  3844.   00005    83 ec 48     sub     esp, 72            ; 00000048H
  3845.  
  3846. ; 243  :     HRESULT hr = S_OK;
  3847. ; 244  :     SLoadVertex *plvVertex;
  3848. ; 245  :     SLoadVertex lvVertexNew;
  3849. ; 246  :     DWORD iVertex;
  3850. ; 247  :     DWORD iVertexNew;
  3851. ; 248  :     DWORD wCur;
  3852. ; 249  :     DWORD wHead;
  3853. ; 250  :     DWORD wWedgeFound;
  3854. ; 251  :     SLoadVertex *plvCur;
  3855. ; 252  : 
  3856. ; 253  :     GXASSERT(pface != NULL && prglvLoaded != NULL && pcVertices != NULL && pcVerticesMax != NULL);
  3857. ; 254  : 
  3858. ; 255  :     iVertex = pface->m_wIndices[iPoint];
  3859.  
  3860.   00008    8b 4d 0c     mov     ecx, DWORD PTR _iPoint$[ebp]
  3861.   0000b    8b 55 08     mov     edx, DWORD PTR _pface$[ebp]
  3862.   0000e    56         push     esi
  3863.   0000f    57         push     edi
  3864.   00010    8d 3c 8a     lea     edi, DWORD PTR [edx+ecx*4]
  3865.   00013    8b 37         mov     esi, DWORD PTR [edi]
  3866.  
  3867. ; 256  :     GXASSERT(iVertex < *pcVertices);
  3868. ; 257  : 
  3869. ; 258  :     plvVertex = &(*prglvLoaded)[iVertex];
  3870.  
  3871.   00015    8b 4d 18     mov     ecx, DWORD PTR _prglvLoaded$[ebp]
  3872.   00018    8b 09         mov     ecx, DWORD PTR [ecx]
  3873.   0001a    8b d6         mov     edx, esi
  3874.   0001c    6b d2 44     imul     edx, 68            ; 00000044H
  3875.   0001f    33 c0         xor     eax, eax
  3876.   00021    03 d1         add     edx, ecx
  3877.  
  3878. ; 259  : 
  3879. ; 260  :     // if the vertex is not currently owned, take ownership
  3880. ; 261  :     if (plvVertex->m_cSmoothingGroupFaces == 0)
  3881.  
  3882.   00023    66 39 42 3c     cmp     WORD PTR [edx+60], ax
  3883.   00027    89 45 fc     mov     DWORD PTR _hr$[ebp], eax
  3884.   0002a    89 7d 0c     mov     DWORD PTR tv257[ebp], edi
  3885.   0002d    75 1c         jne     SHORT $L56487
  3886.  
  3887. ; 262  :     {
  3888. ; 263  :         GXASSERT(plvVertex->m_iSmoothingGroup == 0);
  3889. ; 264  : 
  3890. ; 265  :         plvVertex->m_cSmoothingGroupFaces = 1;
  3891. ; 266  :         plvVertex->m_iSmoothingGroup = iSmoothingGroup;
  3892.  
  3893.   0002f    66 8b 45 10     mov     ax, WORD PTR _iSmoothingGroup$[ebp]
  3894.  
  3895. ; 267  : 
  3896. ; 268  :         plvVertex->m_vNormal = vNormal;
  3897.  
  3898.   00033    8b 75 14     mov     esi, DWORD PTR _vNormal$[ebp]
  3899.   00036    66 c7 42 3c 01
  3900.     00         mov     WORD PTR [edx+60], 1
  3901.   0003c    66 89 42 3a     mov     WORD PTR [edx+58], ax
  3902.   00040    8d 7a 24     lea     edi, DWORD PTR [edx+36]
  3903.   00043    a5         movsd
  3904.   00044    a5         movsd
  3905.   00045    a5         movsd
  3906.  
  3907. ; 269  :     }
  3908. ; 270  :     else
  3909.  
  3910.   00046    e9 17 01 00 00     jmp     $e_Exit$56505
  3911. $L56487:
  3912.  
  3913. ; 271  :     {       
  3914. ; 272  : 
  3915. ; 273  :         if (iSmoothingGroup > 0)
  3916.  
  3917.   0004b    66 39 45 10     cmp     WORD PTR _iSmoothingGroup$[ebp], ax
  3918.   0004f    53         push     ebx
  3919.   00050    8b 5d 14     mov     ebx, DWORD PTR _vNormal$[ebp]
  3920.   00053    76 6c         jbe     SHORT $L56496
  3921. $L56491:
  3922.  
  3923. ; 274  :         {
  3924. ; 275  :             wHead = iVertex;
  3925. ; 276  :             wCur = wHead;
  3926. ; 277  :             wWedgeFound = UNUSED32;
  3927. ; 278  :             do
  3928. ; 279  :             {
  3929. ; 280  :                 plvCur = &( (*prglvLoaded)[wCur] );
  3930. ; 281  : 
  3931. ; 282  :                 if (plvVertex->m_iSmoothingGroup == iSmoothingGroup)
  3932.  
  3933.   00055    66 8b 42 3a     mov     ax, WORD PTR [edx+58]
  3934.   00059    66 3b 45 10     cmp     ax, WORD PTR _iSmoothingGroup$[ebp]
  3935.   0005d    0f 84 a4 00 00
  3936.     00         je     $L56498
  3937.  
  3938. ; 283  :                 {
  3939. ; 284  :                     // found a wedge of this smoothing group
  3940. ; 285  :                     wWedgeFound = wCur;
  3941. ; 286  :                     break;
  3942. ; 287  :                 }
  3943. ; 288  : 
  3944. ; 289  :                 // go to next wedge in the vertex
  3945. ; 290  :                 wCur = (*prglvLoaded)[wCur].m_wPointList;
  3946.  
  3947.   00063    6b f6 44     imul     esi, 68            ; 00000044H
  3948.   00066    8b 74 0e 34     mov     esi, DWORD PTR [esi+ecx+52]
  3949.  
  3950. ; 291  :             } while (wCur != wHead);
  3951.  
  3952.   0006a    3b 37         cmp     esi, DWORD PTR [edi]
  3953.   0006c    75 e7         jne     SHORT $L56491
  3954. $L56500:
  3955.  
  3956. ; 326  :         {
  3957. ; 327  :             lvVertexNew = *plvVertex;
  3958. ; 328  : 
  3959. ; 329  :             lvVertexNew.m_wPointRep = (*prglvLoaded)[iVertex].m_wPointRep;
  3960.  
  3961.   0006e    8b 42 30     mov     eax, DWORD PTR [edx+48]
  3962.   00071    6a 11         push     17            ; 00000011H
  3963.   00073    59         pop     ecx
  3964.  
  3965. ; 330  : 
  3966. ; 331  :             lvVertexNew.m_iSmoothingGroup = iSmoothingGroup;
  3967. ; 332  :             lvVertexNew.m_cSmoothingGroupFaces = 1;
  3968. ; 333  :             lvVertexNew.m_vNormal = vNormal;
  3969. ; 334  : 
  3970. ; 335  :             iVertexNew = (DWORD)*pcVertices;
  3971. ; 336  : 
  3972. ; 337  :             if ( ! AddToDynamicArray( prglvLoaded, lvVertexNew, pcVertices, pcVerticesMax ) )
  3973.  
  3974.   00074    ff 75 20     push     DWORD PTR _pcVerticesMax$[ebp]
  3975.   00077    8b f2         mov     esi, edx
  3976.   00079    8d 7d b8     lea     edi, DWORD PTR _lvVertexNew$[ebp]
  3977.   0007c    f3 a5         rep movsd
  3978.   0007e    89 45 e8     mov     DWORD PTR _lvVertexNew$[ebp+48], eax
  3979.   00081    66 8b 45 10     mov     ax, WORD PTR _iSmoothingGroup$[ebp]
  3980.   00085    66 89 45 f2     mov     WORD PTR _lvVertexNew$[ebp+58], ax
  3981.   00089    8b 45 1c     mov     eax, DWORD PTR _pcVertices$[ebp]
  3982.   0008c    66 c7 45 f4 01
  3983.     00         mov     WORD PTR _lvVertexNew$[ebp+60], 1
  3984.   00092    8b f3         mov     esi, ebx
  3985.   00094    8d 7d dc     lea     edi, DWORD PTR _lvVertexNew$[ebp+36]
  3986.   00097    a5         movsd
  3987.   00098    a5         movsd
  3988.   00099    a5         movsd
  3989.   0009a    8b 30         mov     esi, DWORD PTR [eax]
  3990.   0009c    8b 7d 18     mov     edi, DWORD PTR _prglvLoaded$[ebp]
  3991.   0009f    50         push     eax
  3992.   000a0    8d 45 b8     lea     eax, DWORD PTR _lvVertexNew$[ebp]
  3993.   000a3    50         push     eax
  3994.   000a4    57         push     edi
  3995.   000a5    e8 00 00 00 00     call     ??$AddToDynamicArray@USLoadVertex@GXU@@@@YAHPAPAUSLoadVertex@GXU@@ABU01@PAK2@Z ; AddToDynamicArray<GXU::SLoadVertex>
  3996.   000aa    83 c4 10     add     esp, 16            ; 00000010H
  3997.   000ad    85 c0         test     eax, eax
  3998.   000af    0f 85 8c 00 00
  3999.     00         jne     $L56503
  4000.  
  4001. ; 338  :             {
  4002. ; 339  :                 hr = E_OUTOFMEMORY;
  4003.  
  4004.   000b5    c7 45 fc 0e 00
  4005.     07 80         mov     DWORD PTR _hr$[ebp], -2147024882 ; 8007000eH
  4006.  
  4007. ; 340  :                 goto e_Exit;
  4008.  
  4009.   000bc    e9 a0 00 00 00     jmp     $L57431
  4010. $L56496:
  4011.  
  4012. ; 292  :         }
  4013. ; 293  :         else  // in the 0 case, need to approximate flat shading so always
  4014. ; 294  :             //  insert a new wedge
  4015. ; 295  :         {           
  4016. ; 296  :             wHead = iVertex;
  4017. ; 297  :             wCur = wHead;
  4018. ; 298  :             wWedgeFound = UNUSED32;
  4019. ; 299  :             do
  4020. ; 300  :             {
  4021. ; 301  :                 plvCur = &( (*prglvLoaded)[wCur] );
  4022. ; 302  : 
  4023. ; 303  :                 if ((plvVertex->m_iSmoothingGroup == iSmoothingGroup) &&
  4024. ; 304  :                     (plvVertex->m_vNormal == vNormal))
  4025.  
  4026.   000c1    66 8b 42 3a     mov     ax, WORD PTR [edx+58]
  4027.   000c5    66 3b 45 10     cmp     ax, WORD PTR _iSmoothingGroup$[ebp]
  4028.   000c9    75 2c         jne     SHORT $L57418
  4029.   000cb    d9 03         fld     DWORD PTR [ebx]
  4030.   000cd    d9 42 24     fld     DWORD PTR [edx+36]
  4031.   000d0    da e9         fucompp
  4032.   000d2    df e0         fnstsw     ax
  4033.   000d4    f6 c4 44     test     ah, 68            ; 00000044H
  4034.   000d7    7a 1e         jp     SHORT $L57418
  4035.   000d9    d9 43 04     fld     DWORD PTR [ebx+4]
  4036.   000dc    d9 42 28     fld     DWORD PTR [edx+40]
  4037.   000df    da e9         fucompp
  4038.   000e1    df e0         fnstsw     ax
  4039.   000e3    f6 c4 44     test     ah, 68            ; 00000044H
  4040.   000e6    7a 0f         jp     SHORT $L57418
  4041.   000e8    d9 43 08     fld     DWORD PTR [ebx+8]
  4042.   000eb    d9 42 2c     fld     DWORD PTR [edx+44]
  4043.   000ee    da e9         fucompp
  4044.   000f0    df e0         fnstsw     ax
  4045.   000f2    f6 c4 44     test     ah, 68            ; 00000044H
  4046.   000f5    7b 10         jnp     SHORT $L56498
  4047. $L57418:
  4048.  
  4049. ; 305  :                 {
  4050. ; 306  :                     // found a wedge of this smoothing group
  4051. ; 307  :                     wWedgeFound = wCur;
  4052. ; 308  :                     break;
  4053. ; 309  :                 }
  4054. ; 310  : 
  4055. ; 311  :                 // go to next wedge in the vertex
  4056. ; 312  :                 wCur = (*prglvLoaded)[wCur].m_wPointList;
  4057.  
  4058.   000f7    6b f6 44     imul     esi, 68            ; 00000044H
  4059.   000fa    8b 74 0e 34     mov     esi, DWORD PTR [esi+ecx+52]
  4060.  
  4061. ; 313  :             } while (wCur != wHead);
  4062.  
  4063.   000fe    3b 37         cmp     esi, DWORD PTR [edi]
  4064.   00100    75 bf         jne     SHORT $L56496
  4065.   00102    e9 67 ff ff ff     jmp     $L56500
  4066. $L56498:
  4067.  
  4068. ; 314  :         }
  4069. ; 315  : 
  4070. ; 316  :         // if a wedge was found, add the current normal in to the wedge
  4071. ; 317  :         if (wWedgeFound != UNUSED32)
  4072.  
  4073.   00107    83 fe ff     cmp     esi, -1
  4074.   0010a    0f 84 5e ff ff
  4075.     ff         je     $L56500
  4076.  
  4077. ; 318  :         {
  4078. ; 319  :             (*prglvLoaded)[wWedgeFound].m_cSmoothingGroupFaces += 1;
  4079.  
  4080.   00110    8b c6         mov     eax, esi
  4081.   00112    6b c0 44     imul     eax, 68            ; 00000044H
  4082.   00115    8d 4c 08 3c     lea     ecx, DWORD PTR [eax+ecx+60]
  4083.   00119    66 ff 01     inc     WORD PTR [ecx]
  4084.  
  4085. ; 320  :             (*prglvLoaded)[wWedgeFound].m_vNormal += vNormal;
  4086.  
  4087.   0011c    8b 4d 18     mov     ecx, DWORD PTR _prglvLoaded$[ebp]
  4088.   0011f    8b 09         mov     ecx, DWORD PTR [ecx]
  4089.   00121    d9 03         fld     DWORD PTR [ebx]
  4090.   00123    8d 44 01 24     lea     eax, DWORD PTR [ecx+eax+36]
  4091.   00127    d8 00         fadd     DWORD PTR [eax]
  4092.   00129    d9 18         fstp     DWORD PTR [eax]
  4093.   0012b    d9 43 04     fld     DWORD PTR [ebx+4]
  4094.   0012e    d8 40 04     fadd     DWORD PTR [eax+4]
  4095.   00131    d9 58 04     fstp     DWORD PTR [eax+4]
  4096.   00134    d9 43 08     fld     DWORD PTR [ebx+8]
  4097.   00137    d8 40 08     fadd     DWORD PTR [eax+8]
  4098.   0013a    d9 58 08     fstp     DWORD PTR [eax+8]
  4099.  
  4100. ; 321  : 
  4101. ; 322  :             // now update the face to refer to the new point with the correct attributes
  4102. ; 323  :             pface->m_wIndices[iPoint] = wWedgeFound;
  4103.  
  4104.   0013d    89 37         mov     DWORD PTR [edi], esi
  4105.  
  4106. ; 324  :         }
  4107. ; 325  :         else  // if no matching wedge found.  add a new wedge
  4108.  
  4109.   0013f    eb 20         jmp     SHORT $L57431
  4110. $L56503:
  4111.  
  4112. ; 341  :             }
  4113. ; 342  : 
  4114. ; 343  :             // link the vertex in to the vertex list
  4115. ; 344  :             (*prglvLoaded)[iVertexNew].m_wPointList = (*prglvLoaded)[lvVertexNew.m_wPointRep].m_wPointList;
  4116.  
  4117.   00141    8b 45 e8     mov     eax, DWORD PTR _lvVertexNew$[ebp+48]
  4118.   00144    8b 0f         mov     ecx, DWORD PTR [edi]
  4119.   00146    6b c0 44     imul     eax, 68            ; 00000044H
  4120.   00149    8b 5c 08 34     mov     ebx, DWORD PTR [eax+ecx+52]
  4121.   0014d    8b d6         mov     edx, esi
  4122.   0014f    6b d2 44     imul     edx, 68            ; 00000044H
  4123.   00152    89 5c 0a 34     mov     DWORD PTR [edx+ecx+52], ebx
  4124.  
  4125. ; 345  :             (*prglvLoaded)[lvVertexNew.m_wPointRep].m_wPointList = iVertexNew;
  4126.  
  4127.   00156    8b 0f         mov     ecx, DWORD PTR [edi]
  4128.   00158    89 74 01 34     mov     DWORD PTR [ecx+eax+52], esi
  4129.  
  4130. ; 346  : 
  4131. ; 347  :             // now update the face to refer to the new point with the correct attributes
  4132. ; 348  :             pface->m_wIndices[iPoint] = iVertexNew;
  4133.  
  4134.   0015c    8b 45 0c     mov     eax, DWORD PTR tv257[ebp]
  4135.   0015f    89 30         mov     DWORD PTR [eax], esi
  4136. $L57431:
  4137.   00161    5b         pop     ebx
  4138. $e_Exit$56505:
  4139.  
  4140. ; 349  :         }
  4141. ; 350  : 
  4142. ; 351  :     }
  4143. ; 352  : 
  4144. ; 353  : e_Exit:
  4145. ; 354  :     return hr;
  4146.  
  4147.   00162    8b 45 fc     mov     eax, DWORD PTR _hr$[ebp]
  4148.   00165    5f         pop     edi
  4149.   00166    5e         pop     esi
  4150.  
  4151. ; 355  : }
  4152.  
  4153.   00167    c9         leave
  4154.   00168    c3         ret     0
  4155. ?SetSmoothingGroup@GXU@@YAJPAUSLoadedFace@1@KGAAUD3DXVECTOR3@@PAPAUSLoadVertex@1@PAK3@Z ENDP ; GXU::SetSmoothingGroup
  4156. _TEXT    ENDS
  4157. PUBLIC    ?InitCorners@GXU@@YAJAAPAUSCorner@1@K@Z        ; GXU::InitCorners
  4158. ;    COMDAT xdata$x
  4159. ; File d:\builds\nt32_fre\public\sdk\inc\d3dx9math.inl
  4160. xdata$x    SEGMENT
  4161. $T57452    DD    0ffffffffH
  4162.     DD    FLAT:$L57440
  4163. $T57448    DD    019930520H
  4164.     DD    01H
  4165.     DD    FLAT:$T57452
  4166.     DD    2 DUP(00H)
  4167.     DD    2 DUP(00H)
  4168. ; Function compile flags: /Ogs
  4169. ; File d:\builds\nt32_fre\multimedia\directx\dxsdk\src\mview\gxu\loadutil.cpp
  4170. xdata$x    ENDS
  4171. ;    COMDAT ?InitCorners@GXU@@YAJAAPAUSCorner@1@K@Z
  4172. _TEXT    SEGMENT
  4173. $T57438 = -36                        ; size = 12
  4174. $T57439 = -24                        ; size = 8
  4175. _hr$ = -16                        ; size = 4
  4176. __$EHRec$ = -12                        ; size = 12
  4177. _rgCorners$ = 8                        ; size = 4
  4178. $T57435 = 12                        ; size = 4
  4179. _cCorners$ = 12                        ; size = 4
  4180. ?InitCorners@GXU@@YAJAAPAUSCorner@1@K@Z PROC NEAR    ; GXU::InitCorners, COMDAT
  4181.  
  4182. ; 412  : {
  4183.  
  4184.   00000    b8 00 00 00 00     mov     eax, __ehhandler$?InitCorners@GXU@@YAJAAPAUSCorner@1@K@Z
  4185.   00005    e8 00 00 00 00     call     __EH_prolog
  4186.   0000a    83 ec 18     sub     esp, 24            ; 00000018H
  4187.  
  4188. ; 413  :     HRESULT hr = S_OK;
  4189.  
  4190.   0000d    83 65 f0 00     and     DWORD PTR _hr$[ebp], 0
  4191.   00011    53         push     ebx
  4192.  
  4193. ; 414  :     DWORD iCorner;
  4194. ; 415  : 
  4195. ; 416  :     rgCorners = new SCorner[cCorners];
  4196.  
  4197.   00012    8b 5d 0c     mov     ebx, DWORD PTR _cCorners$[ebp]
  4198.   00015    8b c3         mov     eax, ebx
  4199.   00017    c1 e0 05     shl     eax, 5
  4200.   0001a    56         push     esi
  4201.   0001b    50         push     eax
  4202.   0001c    e8 00 00 00 00     call     ??2@YAPAXI@Z        ; operator new
  4203.   00021    8b f0         mov     esi, eax
  4204.   00023    59         pop     ecx
  4205.   00024    89 75 0c     mov     DWORD PTR $T57435[ebp], esi
  4206.   00027    83 65 fc 00     and     DWORD PTR __$EHRec$[ebp+8], 0
  4207.   0002b    85 f6         test     esi, esi
  4208.   0002d    74 12         je     SHORT $L57436
  4209.   0002f    68 00 00 00 00     push     OFFSET FLAT:??0SCorner@GXU@@QAE@XZ
  4210.   00034    53         push     ebx
  4211.   00035    6a 20         push     32            ; 00000020H
  4212.   00037    56         push     esi
  4213.   00038    e8 00 00 00 00     call     ??_H@YGXPAXIHP6EPAX0@Z@Z
  4214.   0003d    8b c6         mov     eax, esi
  4215.   0003f    eb 02         jmp     SHORT $L57437
  4216. $L57436:
  4217.   00041    33 c0         xor     eax, eax
  4218. $L57437:
  4219.  
  4220. ; 417  :     if (rgCorners == NULL)
  4221.  
  4222.   00043    85 c0         test     eax, eax
  4223.   00045    8b 4d 08     mov     ecx, DWORD PTR _rgCorners$[ebp]
  4224.   00048    89 01         mov     DWORD PTR [ecx], eax
  4225.   0004a    75 09         jne     SHORT $L56555
  4226.  
  4227. ; 418  :     {
  4228. ; 419  :         hr = E_OUTOFMEMORY;
  4229.  
  4230.   0004c    c7 45 f0 0e 00
  4231.     07 80         mov     DWORD PTR _hr$[ebp], -2147024882 ; 8007000eH
  4232.  
  4233. ; 420  :         goto e_Exit;
  4234.  
  4235.   00053    eb 62         jmp     SHORT $e_Exit$56557
  4236. $L56555:
  4237.  
  4238. ; 421  :     }
  4239. ; 422  : 
  4240. ; 423  :     for (iCorner = 0; iCorner < cCorners; iCorner++)
  4241.  
  4242.   00055    85 db         test     ebx, ebx
  4243.   00057    76 5e         jbe     SHORT $e_Exit$56557
  4244.  
  4245. ; 424  :     {
  4246. ; 425  :         rgCorners[iCorner].m_wPoint = UNUSED32;
  4247. ; 426  :         rgCorners[iCorner].m_wFace = UNUSED32;
  4248. ; 427  : 
  4249. ; 428  :         rgCorners[iCorner].m_vNormal = D3DXVECTOR3(0.0f, 0.0f, 0.0f);
  4250.  
  4251.   00059    d9 ee         fldz
  4252.   0005b    33 c0         xor     eax, eax
  4253.   0005d    d9 5d dc     fstp     DWORD PTR $T57438[ebp]
  4254.   00060    57         push     edi
  4255.   00061    d9 ee         fldz
  4256.   00063    d9 5d e0     fstp     DWORD PTR $T57438[ebp+4]
  4257.   00066    d9 ee         fldz
  4258.   00068    d9 5d e4     fstp     DWORD PTR $T57438[ebp+8]
  4259.  
  4260. ; 429  :         rgCorners[iCorner].m_uvTex1 = D3DXVECTOR2(0.0f, 0.0f);
  4261.  
  4262.   0006b    d9 ee         fldz
  4263.   0006d    d9 5d e8     fstp     DWORD PTR $T57439[ebp]
  4264.   00070    d9 ee         fldz
  4265.   00072    d9 5d ec     fstp     DWORD PTR $T57439[ebp+4]
  4266. $L56559:
  4267.   00075    8b 11         mov     edx, DWORD PTR [ecx]
  4268.   00077    83 0c 10 ff     or     DWORD PTR [eax+edx], -1
  4269.   0007b    8b 11         mov     edx, DWORD PTR [ecx]
  4270.   0007d    83 4c 10 04 ff     or     DWORD PTR [eax+edx+4], -1
  4271.   00082    8b 11         mov     edx, DWORD PTR [ecx]
  4272.   00084    8d 7c 10 14     lea     edi, DWORD PTR [eax+edx+20]
  4273.   00088    8d 75 dc     lea     esi, DWORD PTR $T57438[ebp]
  4274.   0008b    a5         movsd
  4275.   0008c    a5         movsd
  4276.   0008d    a5         movsd
  4277.   0008e    8b 11         mov     edx, DWORD PTR [ecx]
  4278.   00090    8b 75 e8     mov     esi, DWORD PTR $T57439[ebp]
  4279.   00093    89 74 10 0c     mov     DWORD PTR [eax+edx+12], esi
  4280.   00097    8b 75 ec     mov     esi, DWORD PTR $T57439[ebp+4]
  4281.   0009a    89 74 10 10     mov     DWORD PTR [eax+edx+16], esi
  4282.  
  4283. ; 430  : 
  4284. ; 431  :         rgCorners[iCorner].m_bNormalSpecified = false;
  4285.  
  4286.   0009e    8b 11         mov     edx, DWORD PTR [ecx]
  4287.   000a0    8d 54 10 08     lea     edx, DWORD PTR [eax+edx+8]
  4288.   000a4    80 22 fe     and     BYTE PTR [edx], -2    ; fffffffeH
  4289.  
  4290. ; 432  :         rgCorners[iCorner].m_bUvSpecified = false;
  4291.  
  4292.   000a7    8b 11         mov     edx, DWORD PTR [ecx]
  4293.   000a9    8d 54 10 08     lea     edx, DWORD PTR [eax+edx+8]
  4294.   000ad    80 22 fd     and     BYTE PTR [edx], -3    ; fffffffdH
  4295.   000b0    83 c0 20     add     eax, 32            ; 00000020H
  4296.   000b3    4b         dec     ebx
  4297.   000b4    75 bf         jne     SHORT $L56559
  4298.   000b6    5f         pop     edi
  4299. $e_Exit$56557:
  4300.  
  4301. ; 433  :     }
  4302. ; 434  : 
  4303. ; 435  : e_Exit:
  4304. ; 436  :     return hr;
  4305. ; 437  : }
  4306.  
  4307.   000b7    8b 4d f4     mov     ecx, DWORD PTR __$EHRec$[ebp]
  4308.   000ba    8b 45 f0     mov     eax, DWORD PTR _hr$[ebp]
  4309.   000bd    5e         pop     esi
  4310.   000be    5b         pop     ebx
  4311.   000bf    64 89 0d 00 00
  4312.     00 00         mov     DWORD PTR fs:__except_list, ecx
  4313.   000c6    c9         leave
  4314.   000c7    c3         ret     0
  4315. _TEXT    ENDS
  4316. ;    COMDAT text$x
  4317. text$x    SEGMENT
  4318. $L57440:
  4319.   00000    ff 75 0c     push     DWORD PTR $T57435[ebp]
  4320.   00003    e8 00 00 00 00     call     ??3@YAXPAX@Z        ; operator delete
  4321.   00008    59         pop     ecx
  4322.   00009    c3         ret     0
  4323. __ehhandler$?InitCorners@GXU@@YAJAAPAUSCorner@1@K@Z:
  4324.   0000a    b8 00 00 00 00     mov     eax, OFFSET FLAT:$T57448
  4325.   0000f    e9 00 00 00 00     jmp     ___CxxFrameHandler
  4326. text$x    ENDS
  4327. ?InitCorners@GXU@@YAJAAPAUSCorner@1@K@Z ENDP        ; GXU::InitCorners
  4328. PUBLIC    ?SetMesh@GXU@@YAJAAPAUSLoadedFace@1@KAAPAUSLoadVertex@1@KPAUSCorner@1@KPAUSFVFData@1@HPAKKKPAUIDirect3DDevice9@@PAPAUID3DXMesh@@PAPAUID3DXBuffer@@@Z ; GXU::SetMesh
  4329. EXTRN    _D3DXCreateMeshFVF@24:NEAR
  4330. ; Function compile flags: /Ogs
  4331. ;    COMDAT ?SetMesh@GXU@@YAJAAPAUSLoadedFace@1@KAAPAUSLoadVertex@1@KPAUSCorner@1@KPAUSFVFData@1@HPAKKKPAUIDirect3DDevice9@@PAPAUID3DXMesh@@PAPAUID3DXBuffer@@@Z
  4332. _TEXT    SEGMENT
  4333. _rgdwTexCoordSizesOtherData$ = -304            ; size = 32
  4334. _cfvfOtherData$ = -272                    ; size = 64
  4335. _cfvf$ = -208                        ; size = 64
  4336. $T57459 = -144                        ; size = 12
  4337. _v$57506 = -132                        ; size = 12
  4338. $T57458 = -120                        ; size = 12
  4339. tv2083 = -108                        ; size = 4
  4340. tv2087 = -104                        ; size = 4
  4341. $T57567 = -100                        ; size = 4
  4342. _vEdge1$56680 = -96                    ; size = 12
  4343. _vEdge2$56681 = -84                    ; size = 12
  4344. _iTexCoord$ = -72                    ; size = 4
  4345. _rgdwFaceRemap$ = -68                    ; size = 4
  4346. _rgdwPointRepsTemp$ = -64                ; size = 4
  4347. _vNormal$ = -60                        ; size = 12
  4348. tv216 = -48                        ; size = 4
  4349. _iPoint$ = -48                        ; size = 4
  4350. _pvPoints$ = -44                    ; size = 4
  4351. _pvFaces$ = -40                        ; size = 4
  4352. _rgiAttribIds$ = -36                    ; size = 4
  4353. tv2080 = -32                        ; size = 4
  4354. tv435 = -32                        ; size = 4
  4355. _pvCurPoint$ = -28                    ; size = 4
  4356. _pbufAdjacency$ = -24                    ; size = 4
  4357. _cFacesActual$ = -20                    ; size = 4
  4358. _cVerticesMax$ = -20                    ; size = 4
  4359. tv2069 = -16                        ; size = 4
  4360. _iCorner$ = -16                        ; size = 4
  4361. tv2424 = -12                        ; size = 4
  4362. _pbTexCur$ = -12                    ; size = 4
  4363. _iFace$ = -12                        ; size = 4
  4364. _ptmMesh$ = -8                        ; size = 4
  4365. tv2038 = -4                        ; size = 4
  4366. _hr$ = -4                        ; size = 4
  4367. _rglfFaces$ = 8                        ; size = 4
  4368. _cFaces$ = 12                        ; size = 4
  4369. _rglvLoaded$ = 16                    ; size = 4
  4370. tv2402 = 20                        ; size = 4
  4371. _cVertices$ = 20                    ; size = 4
  4372. _rgCorners$ = 24                    ; size = 4
  4373. _cCorners$ = 28                        ; size = 4
  4374. tv757 = 32                        ; size = 4
  4375. _pdwAdjacency$ = 32                    ; size = 4
  4376. _pFVFData$ = 32                        ; size = 4
  4377. _bUsePointRepData$ = 36                    ; size = 4
  4378. _rgdwAdjacencyFile$ = 40                ; size = 4
  4379. _dwOptions$ = 44                    ; size = 4
  4380. _dwFVF$ = 48                        ; size = 4
  4381. _pD3DDevice$ = 52                    ; size = 4
  4382. _ppMesh$ = 56                        ; size = 4
  4383. _ppbufAdjacency$ = 60                    ; size = 4
  4384. ?SetMesh@GXU@@YAJAAPAUSLoadedFace@1@KAAPAUSLoadVertex@1@KPAUSCorner@1@KPAUSFVFData@1@HPAKKKPAUIDirect3DDevice9@@PAPAUID3DXMesh@@PAPAUID3DXBuffer@@@Z PROC NEAR ; GXU::SetMesh, COMDAT
  4385.  
  4386. ; 955  : }
  4387.  
  4388.   00000    8b ff         npad     2
  4389.  
  4390. ; 497  : {
  4391.  
  4392.   00002    55         push     ebp
  4393.   00003    8b ec         mov     ebp, esp
  4394.   00005    81 ec 30 01 00
  4395.     00         sub     esp, 304        ; 00000130H
  4396.  
  4397. ; 498  :     HRESULT hr = S_OK;
  4398. ; 499  :     PBYTE pvPoints = NULL;
  4399. ; 500  :     D3DXVECTOR3 vNormal;
  4400. ; 501  : 
  4401. ; 502  :     DWORD iVertex;
  4402. ; 503  :     D3DXVECTOR3 *pvNormal;
  4403. ; 504  :     D3DXVECTOR2 *puvTex1;
  4404. ; 505  :     DWORD iPoint;
  4405. ; 506  :     DWORD iFace;
  4406. ; 507  :     DWORD iCorner;
  4407. ; 508  :     PBYTE pvCurPoint;
  4408. ; 509  :     DWORD iWeight;
  4409. ; 510  :     DWORD iTexCoord;
  4410. ; 511  :     DWORD iInitialTexCoord;
  4411. ; 512  :     PBYTE pbCur;
  4412. ; 513  :     DWORD cFacesActual;
  4413. ; 514  :     DWORD iFaceActual;
  4414. ; 515  : 
  4415. ; 516  :     ID3DXMesh *ptmMesh = NULL;
  4416. ; 517  :     DWORD *rgdwFaces = NULL;
  4417. ; 518  :     UINT16 *rgwFaces = NULL;
  4418. ; 519  :     DWORD *rgiAttribIds = NULL;
  4419. ; 520  :     DWORD *pdwFaceCur;
  4420. ; 521  :     UINT16 *pwFaceCur;
  4421. ; 522  :     PVOID pvFaces = NULL;
  4422. ; 523  : 
  4423. ; 524  :     DWORD cVerticesMax = cVertices;
  4424.  
  4425.   0000b    8b 45 14     mov     eax, DWORD PTR _cVertices$[ebp]
  4426.   0000e    56         push     esi
  4427.  
  4428. ; 525  :     BOOL bSmoothingGroups;
  4429. ; 526  : 
  4430. ; 527  :     DWORD *rgdwPointRepsTemp = NULL;
  4431. ; 528  :     LPD3DXBUFFER pbufAdjacency = NULL;
  4432. ; 529  :     DWORD *pdwAdjacency;
  4433. ; 530  :     DWORD rgdwTexCoordSizesOtherData[8];
  4434. ; 531  :     PBYTE pbTexCur;
  4435. ; 532  :     DWORD *rgdwFaceRemap = NULL;
  4436. ; 533  : 
  4437. ; 534  :     GXASSERT(ppMesh != NULL);
  4438. ; 535  :     GXASSERT(rglfFaces != NULL);
  4439. ; 536  :     GXASSERT(rglvLoaded != NULL);
  4440. ; 537  :     // Corners are allowed to be NULL
  4441. ; 538  :     DXCrackFVF  cfvf(dwFVF);                                
  4442.  
  4443.   0000f    ff 75 30     push     DWORD PTR _dwFVF$[ebp]
  4444.   00012    33 f6         xor     esi, esi
  4445.   00014    8d 8d 30 ff ff
  4446.     ff         lea     ecx, DWORD PTR _cfvf$[ebp]
  4447.   0001a    89 75 d4     mov     DWORD PTR _pvPoints$[ebp], esi
  4448.   0001d    89 75 f8     mov     DWORD PTR _ptmMesh$[ebp], esi
  4449.   00020    89 75 dc     mov     DWORD PTR _rgiAttribIds$[ebp], esi
  4450.   00023    89 75 d8     mov     DWORD PTR _pvFaces$[ebp], esi
  4451.   00026    89 45 ec     mov     DWORD PTR _cVerticesMax$[ebp], eax
  4452.   00029    89 75 c0     mov     DWORD PTR _rgdwPointRepsTemp$[ebp], esi
  4453.   0002c    89 75 e8     mov     DWORD PTR _pbufAdjacency$[ebp], esi
  4454.   0002f    89 75 bc     mov     DWORD PTR _rgdwFaceRemap$[ebp], esi
  4455.   00032    e8 00 00 00 00     call     ??0DXCrackFVF@@QAE@K@Z    ; DXCrackFVF::DXCrackFVF
  4456.  
  4457. ; 539  :     DXCrackFVF  cfvfOtherData(pFVFData != NULL ? pFVFData->dwFVF : D3DFVF_XYZ);                                
  4458.  
  4459.   00037    8b 45 20     mov     eax, DWORD PTR _pFVFData$[ebp]
  4460.   0003a    3b c6         cmp     eax, esi
  4461.   0003c    74 04         je     SHORT $L57456
  4462.   0003e    8b 00         mov     eax, DWORD PTR [eax]
  4463.   00040    eb 03         jmp     SHORT $L57457
  4464. $L57456:
  4465.   00042    6a 02         push     2
  4466.   00044    58         pop     eax
  4467. $L57457:
  4468.   00045    53         push     ebx
  4469.   00046    57         push     edi
  4470.   00047    50         push     eax
  4471.   00048    8d 8d f0 fe ff
  4472.     ff         lea     ecx, DWORD PTR _cfvfOtherData$[ebp]
  4473.   0004e    e8 00 00 00 00     call     ??0DXCrackFVF@@QAE@K@Z    ; DXCrackFVF::DXCrackFVF
  4474.  
  4475. ; 540  : 
  4476. ; 541  :     cfvfOtherData.GetTexCoordSizes(rgdwTexCoordSizesOtherData);
  4477.  
  4478.   00053    8d 85 d0 fe ff
  4479.     ff         lea     eax, DWORD PTR _rgdwTexCoordSizesOtherData$[ebp]
  4480.   00059    50         push     eax
  4481.   0005a    8d 8d f0 fe ff
  4482.     ff         lea     ecx, DWORD PTR _cfvfOtherData$[ebp]
  4483.   00060    e8 00 00 00 00     call     ?GetTexCoordSizes@DXCrackFVF@@QAEXPAK@Z ; DXCrackFVF::GetTexCoordSizes
  4484.  
  4485. ; 542  : 
  4486. ; 543  :     // handle smoothing groups
  4487. ; 544  :     bSmoothingGroups = false;
  4488.  
  4489.   00065    33 c9         xor     ecx, ecx
  4490.  
  4491. ; 545  :     for (iFace = 0; iFace < cFaces; iFace++)
  4492.  
  4493.   00067    39 75 0c     cmp     DWORD PTR _cFaces$[ebp], esi
  4494.   0006a    0f 86 d0 01 00
  4495.     00         jbe     $L56700
  4496.   00070    8b 45 08     mov     eax, DWORD PTR _rglfFaces$[ebp]
  4497.   00073    8b 00         mov     eax, DWORD PTR [eax]
  4498.   00075    8b 55 0c     mov     edx, DWORD PTR _cFaces$[ebp]
  4499.   00078    83 c0 0c     add     eax, 12            ; 0000000cH
  4500. $L56671:
  4501.  
  4502. ; 546  :     {
  4503. ; 547  :         if (rglfFaces[iFace].m_bSmoothingGroupSpecified)
  4504.  
  4505.   0007b    f6 00 08     test     BYTE PTR [eax], 8
  4506.   0007e    74 03         je     SHORT $L56672
  4507.  
  4508. ; 548  :         {
  4509. ; 549  :             bSmoothingGroups = true;
  4510.  
  4511.   00080    33 c9         xor     ecx, ecx
  4512.   00082    41         inc     ecx
  4513. $L56672:
  4514.   00083    83 c0 2c     add     eax, 44            ; 0000002cH
  4515.   00086    4a         dec     edx
  4516.   00087    75 f2         jne     SHORT $L56671
  4517.  
  4518. ; 550  :         }
  4519. ; 551  :     }
  4520. ; 552  : 
  4521. ; 553  :     // if there are smoothing groups, and the normals are there is a 
  4522. ; 554  :     //   reason to compute smoothing groups, then compute them.
  4523. ; 555  :     if (bSmoothingGroups && cfvf.BNormal())
  4524.  
  4525.   00089    85 c9         test     ecx, ecx
  4526.   0008b    0f 84 af 01 00
  4527.     00         je     $L56700
  4528.   00091    83 bd 38 ff ff
  4529.     ff 00         cmp     DWORD PTR _cfvf$[ebp+8], 0
  4530.   00098    0f 86 a2 01 00
  4531.     00         jbe     $L56700
  4532.  
  4533. ; 556  :     {
  4534. ; 557  :         SLoadedFace *plfFace;
  4535. ; 558  :         SLoadVertex *plvPos0;
  4536. ; 559  :         SLoadVertex *plvPos1;
  4537. ; 560  :         SLoadVertex *plvPos2;
  4538. ; 561  :         D3DXVECTOR3 vEdge1;
  4539. ; 562  :         D3DXVECTOR3 vEdge2;
  4540. ; 563  :         SLoadVertex *plvVert;
  4541. ; 564  :         DWORD iVert;
  4542. ; 565  : 
  4543. ; 566  :         for (iFace = 0 ; iFace < cFaces; iFace++)
  4544.  
  4545.   0009e    33 db         xor     ebx, ebx
  4546.   000a0    89 5d f4     mov     DWORD PTR _iFace$[ebp], ebx
  4547. $L56684:
  4548.  
  4549. ; 567  :         {
  4550. ; 568  :             plfFace = &rglfFaces[iFace];
  4551.  
  4552.   000a3    8b 45 08     mov     eax, DWORD PTR _rglfFaces$[ebp]
  4553.   000a6    8b 10         mov     edx, DWORD PTR [eax]
  4554.   000a8    03 d3         add     edx, ebx
  4555.  
  4556. ; 569  :             if (plfFace->m_bSmoothingGroupSpecified)
  4557.  
  4558.   000aa    f6 42 0c 08     test     BYTE PTR [edx+12], 8
  4559.   000ae    0f 84 20 01 00
  4560.     00         je     $L56685
  4561.  
  4562. ; 570  :             {
  4563. ; 571  :                 plvPos0 = &rglvLoaded[plfFace->m_wIndices[0]];
  4564.  
  4565.   000b4    8b 45 10     mov     eax, DWORD PTR _rglvLoaded$[ebp]
  4566.   000b7    8b 30         mov     esi, DWORD PTR [eax]
  4567.   000b9    8b 02         mov     eax, DWORD PTR [edx]
  4568.  
  4569. ; 572  :                 plvPos1 = &rglvLoaded[plfFace->m_wIndices[1]];
  4570.  
  4571.   000bb    8b 4a 04     mov     ecx, DWORD PTR [edx+4]
  4572.   000be    6b c0 44     imul     eax, 68            ; 00000044H
  4573.  
  4574. ; 573  :                 plvPos2 = &rglvLoaded[plfFace->m_wIndices[2]];
  4575.  
  4576.   000c1    8b 52 08     mov     edx, DWORD PTR [edx+8]
  4577.   000c4    6b c9 44     imul     ecx, 68            ; 00000044H
  4578.   000c7    03 c6         add     eax, esi
  4579.   000c9    6b d2 44     imul     edx, 68            ; 00000044H
  4580.  
  4581. ; 574  : 
  4582. ; 575  :                 vEdge1 = plvPos0->m_vPos - plvPos1->m_vPos;
  4583.  
  4584.   000cc    d9 00         fld     DWORD PTR [eax]
  4585.   000ce    03 ce         add     ecx, esi
  4586.   000d0    03 d6         add     edx, esi
  4587.   000d2    8d 75 88     lea     esi, DWORD PTR $T57458[ebp]
  4588.   000d5    d8 21         fsub     DWORD PTR [ecx]
  4589.   000d7    8d 7d a0     lea     edi, DWORD PTR _vEdge1$56680[ebp]
  4590.   000da    d9 5d 88     fstp     DWORD PTR $T57458[ebp]
  4591.   000dd    d9 40 04     fld     DWORD PTR [eax+4]
  4592.   000e0    d8 61 04     fsub     DWORD PTR [ecx+4]
  4593.   000e3    d9 5d 8c     fstp     DWORD PTR $T57458[ebp+4]
  4594.   000e6    d9 40 08     fld     DWORD PTR [eax+8]
  4595.   000e9    d8 61 08     fsub     DWORD PTR [ecx+8]
  4596.   000ec    d9 5d 90     fstp     DWORD PTR $T57458[ebp+8]
  4597.   000ef    a5         movsd
  4598.  
  4599. ; 576  :                 vEdge2 = plvPos0->m_vPos - plvPos2->m_vPos;
  4600.  
  4601.   000f0    d9 00         fld     DWORD PTR [eax]
  4602.   000f2    d8 22         fsub     DWORD PTR [edx]
  4603.   000f4    a5         movsd
  4604.   000f5    d9 9d 70 ff ff
  4605.     ff         fstp     DWORD PTR $T57459[ebp]
  4606.   000fb    d9 40 04     fld     DWORD PTR [eax+4]
  4607.   000fe    a5         movsd
  4608.   000ff    d8 62 04     fsub     DWORD PTR [edx+4]
  4609.   00102    d9 9d 74 ff ff
  4610.     ff         fstp     DWORD PTR $T57459[ebp+4]
  4611.   00108    8d b5 70 ff ff
  4612.     ff         lea     esi, DWORD PTR $T57459[ebp]
  4613.   0010e    d9 40 08     fld     DWORD PTR [eax+8]
  4614.   00111    8d 7d ac     lea     edi, DWORD PTR _vEdge2$56681[ebp]
  4615.   00114    d8 62 08     fsub     DWORD PTR [edx+8]
  4616.   00117    d9 9d 78 ff ff
  4617.     ff         fstp     DWORD PTR $T57459[ebp+8]
  4618.   0011d    a5         movsd
  4619.   0011e    a5         movsd
  4620.   0011f    a5         movsd
  4621.  
  4622. ; 577  : 
  4623. ; 578  :                 // calculate the normal of the face from the two edge vectors
  4624. ; 579  :                 D3DXVec3Cross(&vNormal, &vEdge1, &vEdge2);
  4625.  
  4626.   00120    d9 45 b4     fld     DWORD PTR _vEdge2$56681[ebp+8]
  4627.   00123    d8 4d a4     fmul     DWORD PTR _vEdge1$56680[ebp+4]
  4628.   00126    d9 45 b0     fld     DWORD PTR _vEdge2$56681[ebp+4]
  4629.   00129    8d b5 7c ff ff
  4630.     ff         lea     esi, DWORD PTR _v$57506[ebp]
  4631.   0012f    d8 4d a8     fmul     DWORD PTR _vEdge1$56680[ebp+8]
  4632.   00132    8d 7d c4     lea     edi, DWORD PTR _vNormal$[ebp]
  4633.   00135    de e9         fsubp     ST(1), ST(0)
  4634.   00137    d9 9d 7c ff ff
  4635.     ff         fstp     DWORD PTR _v$57506[ebp]
  4636.   0013d    d9 45 a8     fld     DWORD PTR _vEdge1$56680[ebp+8]
  4637.   00140    d8 4d ac     fmul     DWORD PTR _vEdge2$56681[ebp]
  4638.   00143    d9 45 b4     fld     DWORD PTR _vEdge2$56681[ebp+8]
  4639.   00146    d8 4d a0     fmul     DWORD PTR _vEdge1$56680[ebp]
  4640.   00149    de e9         fsubp     ST(1), ST(0)
  4641.   0014b    d9 5d 80     fstp     DWORD PTR _v$57506[ebp+4]
  4642.   0014e    d9 45 b0     fld     DWORD PTR _vEdge2$56681[ebp+4]
  4643.   00151    d8 4d a0     fmul     DWORD PTR _vEdge1$56680[ebp]
  4644.   00154    d9 45 a4     fld     DWORD PTR _vEdge1$56680[ebp+4]
  4645.   00157    d8 4d ac     fmul     DWORD PTR _vEdge2$56681[ebp]
  4646.   0015a    de e9         fsubp     ST(1), ST(0)
  4647.   0015c    d9 5d 84     fstp     DWORD PTR _v$57506[ebp+8]
  4648.   0015f    a5         movsd
  4649.   00160    a5         movsd
  4650.   00161    a5         movsd
  4651.  
  4652. ; 580  :                 vNormal /= D3DXVec3Length(&vNormal);
  4653.  
  4654.   00162    d9 45 c4     fld     DWORD PTR _vNormal$[ebp]
  4655.   00165    d8 4d c4     fmul     DWORD PTR _vNormal$[ebp]
  4656.   00168    d9 45 cc     fld     DWORD PTR _vNormal$[ebp+8]
  4657.   0016b    d8 4d cc     fmul     DWORD PTR _vNormal$[ebp+8]
  4658.  
  4659. ; 953  : 
  4660. ; 954  :     return hr;
  4661.  
  4662.   0016e    de c1         faddp     ST(1), ST(0)
  4663.   00170    d9 45 c8     fld     DWORD PTR _vNormal$[ebp+4]
  4664.   00173    d8 4d c8     fmul     DWORD PTR _vNormal$[ebp+4]
  4665.   00176    de c1         faddp     ST(1), ST(0)
  4666.   00178    d9 fa         fsqrt
  4667.   0017a    d8 3d 00 00 00
  4668.     00         fdivr     DWORD PTR __real@3f800000
  4669.   00180    d9 45 c4     fld     DWORD PTR _vNormal$[ebp]
  4670.   00183    d8 c9         fmul     ST(0), ST(1)
  4671.   00185    d9 5d c4     fstp     DWORD PTR _vNormal$[ebp]
  4672.   00188    d9 45 c8     fld     DWORD PTR _vNormal$[ebp+4]
  4673.   0018b    d8 c9         fmul     ST(0), ST(1)
  4674.   0018d    d9 5d c8     fstp     DWORD PTR _vNormal$[ebp+4]
  4675.   00190    d9 45 cc     fld     DWORD PTR _vNormal$[ebp+8]
  4676.   00193    33 f6         xor     esi, esi
  4677.   00195    d8 c9         fmul     ST(0), ST(1)
  4678.   00197    d9 5d cc     fstp     DWORD PTR _vNormal$[ebp+8]
  4679.   0019a    dd d8         fstp     ST(0)
  4680. $L56690:
  4681.   0019c    8b 45 08     mov     eax, DWORD PTR _rglfFaces$[ebp]
  4682.   0019f    8b 00         mov     eax, DWORD PTR [eax]
  4683.   001a1    8d 4d ec     lea     ecx, DWORD PTR _cVerticesMax$[ebp]
  4684.   001a4    51         push     ecx
  4685.   001a5    8d 4d 14     lea     ecx, DWORD PTR _cVertices$[ebp]
  4686.   001a8    51         push     ecx
  4687.   001a9    ff 75 10     push     DWORD PTR _rglvLoaded$[ebp]
  4688.   001ac    8d 4d c4     lea     ecx, DWORD PTR _vNormal$[ebp]
  4689.   001af    51         push     ecx
  4690.   001b0    03 c3         add     eax, ebx
  4691.   001b2    33 c9         xor     ecx, ecx
  4692.   001b4    66 8b 48 28     mov     cx, WORD PTR [eax+40]
  4693.   001b8    51         push     ecx
  4694.   001b9    56         push     esi
  4695.   001ba    50         push     eax
  4696.   001bb    e8 00 00 00 00     call     ?SetSmoothingGroup@GXU@@YAJPAUSLoadedFace@1@KGAAUD3DXVECTOR3@@PAPAUSLoadVertex@1@PAK3@Z ; GXU::SetSmoothingGroup
  4697.   001c0    83 c4 1c     add     esp, 28            ; 0000001cH
  4698.   001c3    85 c0         test     eax, eax
  4699.   001c5    89 45 fc     mov     DWORD PTR _hr$[ebp], eax
  4700.   001c8    0f 8c 75 06 00
  4701.     00         jl     $e_Exit$56695
  4702.   001ce    46         inc     esi
  4703.   001cf    83 fe 03     cmp     esi, 3
  4704.   001d2    72 c8         jb     SHORT $L56690
  4705. $L56685:
  4706.  
  4707. ; 556  :     {
  4708. ; 557  :         SLoadedFace *plfFace;
  4709. ; 558  :         SLoadVertex *plvPos0;
  4710. ; 559  :         SLoadVertex *plvPos1;
  4711. ; 560  :         SLoadVertex *plvPos2;
  4712. ; 561  :         D3DXVECTOR3 vEdge1;
  4713. ; 562  :         D3DXVECTOR3 vEdge2;
  4714. ; 563  :         SLoadVertex *plvVert;
  4715. ; 564  :         DWORD iVert;
  4716. ; 565  : 
  4717. ; 566  :         for (iFace = 0 ; iFace < cFaces; iFace++)
  4718.  
  4719.   001d4    ff 45 f4     inc     DWORD PTR _iFace$[ebp]
  4720.   001d7    8b 45 f4     mov     eax, DWORD PTR _iFace$[ebp]
  4721.   001da    83 c3 2c     add     ebx, 44            ; 0000002cH
  4722.   001dd    3b 45 0c     cmp     eax, DWORD PTR _cFaces$[ebp]
  4723.   001e0    0f 82 bd fe ff
  4724.     ff         jb     $L56684
  4725.  
  4726. ; 581  :                 //vNormal *= -1;
  4727. ; 582  : 
  4728. ; 583  :                 for (iPoint = 0; iPoint < 3; iPoint++)
  4729. ; 584  :                 {
  4730. ; 585  :                     hr = SetSmoothingGroup(&rglfFaces[iFace], iPoint, rglfFaces[iFace].m_iSmoothingGroup, vNormal, &rglvLoaded, &cVertices, &cVerticesMax);
  4731. ; 586  :                     if (FAILED(hr))
  4732. ; 587  :                         goto e_Exit;
  4733. ; 588  :                 }
  4734. ; 589  :             }
  4735. ; 590  :         }
  4736. ; 591  : 
  4737. ; 592  :         DWORD iTest;
  4738. ; 593  :         iTest = 0;
  4739. ; 594  :         // average and renormalize vertices shared among faces of the same smoothing group
  4740. ; 595  :         for (iVert = 0; iVert < cVertices; iVert++)
  4741.  
  4742.   001e6    8b 55 14     mov     edx, DWORD PTR _cVertices$[ebp]
  4743.   001e9    85 d2         test     edx, edx
  4744.   001eb    76 53         jbe     SHORT $L56700
  4745.   001ed    33 c9         xor     ecx, ecx
  4746. $L56698:
  4747.  
  4748. ; 596  :         {
  4749. ; 597  :             plvVert = &rglvLoaded[iVert];
  4750.  
  4751.   001ef    8b 45 10     mov     eax, DWORD PTR _rglvLoaded$[ebp]
  4752.   001f2    8b 00         mov     eax, DWORD PTR [eax]
  4753.   001f4    03 c1         add     eax, ecx
  4754.  
  4755. ; 598  : 
  4756. ; 599  :             if (plvVert->m_cSmoothingGroupFaces > 1)
  4757.  
  4758.   001f6    66 83 78 3c 01     cmp     WORD PTR [eax+60], 1
  4759.   001fb    76 3d         jbe     SHORT $L56699
  4760.  
  4761. ; 600  :             {
  4762. ; 601  :                 /*plvVert->m_vNormal /= plvVert->m_cSmoothingGroupFaces*/;
  4763. ; 602  :                 plvVert->m_vNormal /= D3DXVec3Length(&plvVert->m_vNormal);
  4764.  
  4765.   001fd    d9 40 2c     fld     DWORD PTR [eax+44]
  4766.   00200    d9 40 28     fld     DWORD PTR [eax+40]
  4767.   00203    d9 40 24     fld     DWORD PTR [eax+36]
  4768.   00206    d9 c0         fld     ST(0)
  4769.   00208    d8 c9         fmul     ST(0), ST(1)
  4770.   0020a    d9 c2         fld     ST(2)
  4771.   0020c    d8 cb         fmul     ST(0), ST(3)
  4772.  
  4773. ; 953  : 
  4774. ; 954  :     return hr;
  4775.  
  4776.   0020e    de c1         faddp     ST(1), ST(0)
  4777.   00210    d9 c3         fld     ST(3)
  4778.   00212    d8 cc         fmul     ST(0), ST(4)
  4779.   00214    de c1         faddp     ST(1), ST(0)
  4780.   00216    d9 fa         fsqrt
  4781.   00218    dd db         fstp     ST(3)
  4782.   0021a    dd d8         fstp     ST(0)
  4783.   0021c    dd d8         fstp     ST(0)
  4784.   0021e    d8 3d 00 00 00
  4785.     00         fdivr     DWORD PTR __real@3f800000
  4786.   00224    d9 c0         fld     ST(0)
  4787.   00226    d8 48 24     fmul     DWORD PTR [eax+36]
  4788.   00229    d9 58 24     fstp     DWORD PTR [eax+36]
  4789.   0022c    d9 c0         fld     ST(0)
  4790.   0022e    d8 48 28     fmul     DWORD PTR [eax+40]
  4791.   00231    d9 58 28     fstp     DWORD PTR [eax+40]
  4792.   00234    d8 48 2c     fmul     DWORD PTR [eax+44]
  4793.   00237    d9 58 2c     fstp     DWORD PTR [eax+44]
  4794. $L56699:
  4795.   0023a    83 c1 44     add     ecx, 68            ; 00000044H
  4796.   0023d    4a         dec     edx
  4797.   0023e    75 af         jne     SHORT $L56698
  4798. $L56700:
  4799.  
  4800. ; 603  :             }
  4801. ; 604  : 
  4802. ; 605  :             if (plvVert->m_iSmoothingGroup == 0)
  4803. ; 606  :             {
  4804. ; 607  :                 iTest += 1;
  4805. ; 608  :             }
  4806. ; 609  :         }
  4807. ; 610  : 
  4808. ; 611  :     }
  4809. ; 612  : 
  4810. ; 613  :     if (cfvf.BDiffuse())
  4811.  
  4812.   00240    33 f6         xor     esi, esi
  4813.   00242    39 b5 40 ff ff
  4814.     ff         cmp     DWORD PTR _cfvf$[ebp+16], esi
  4815.   00248    76 4f         jbe     SHORT $L57647
  4816.  
  4817. ; 614  :     {
  4818. ; 615  :         // propagate face color attributes into vertex attributes
  4819. ; 616  :         for (iFace = 0; iFace < cFaces; iFace++)
  4820.  
  4821.   0024a    33 db         xor     ebx, ebx
  4822.   0024c    39 75 0c     cmp     DWORD PTR _cFaces$[ebp], esi
  4823.   0024f    76 48         jbe     SHORT $L57647
  4824. $L57653:
  4825.  
  4826. ; 617  :         {
  4827. ; 618  :             if (rglfFaces[iFace].m_bColorSpecified)
  4828.  
  4829.   00251    8b 45 08     mov     eax, DWORD PTR _rglfFaces$[ebp]
  4830.   00254    8b 00         mov     eax, DWORD PTR [eax]
  4831.   00256    f6 44 06 0c 01     test     BYTE PTR [esi+eax+12], 1
  4832.   0025b    74 33         je     SHORT $L56705
  4833.  
  4834. ; 619  :             {
  4835. ; 620  :                 for (iPoint = 0; iPoint < 3; iPoint++)
  4836.  
  4837.   0025d    33 ff         xor     edi, edi
  4838. $L57646:
  4839.  
  4840. ; 621  :                 {
  4841. ; 622  :                     hr = SetVertexColor(&rglfFaces[iFace], iPoint, rglfFaces[iFace].m_colorFace, &rglvLoaded, &cVertices, &cVerticesMax);
  4842.  
  4843.   0025f    8b 45 08     mov     eax, DWORD PTR _rglfFaces$[ebp]
  4844.   00262    8b 00         mov     eax, DWORD PTR [eax]
  4845.   00264    8d 4d ec     lea     ecx, DWORD PTR _cVerticesMax$[ebp]
  4846.   00267    51         push     ecx
  4847.   00268    8d 4d 14     lea     ecx, DWORD PTR _cVertices$[ebp]
  4848.   0026b    51         push     ecx
  4849.   0026c    ff 75 10     push     DWORD PTR _rglvLoaded$[ebp]
  4850.   0026f    03 c6         add     eax, esi
  4851.   00271    8d 48 10     lea     ecx, DWORD PTR [eax+16]
  4852.   00274    51         push     ecx
  4853.   00275    57         push     edi
  4854.   00276    50         push     eax
  4855.   00277    e8 00 00 00 00     call     ?SetVertexColor@GXU@@YAJPAUSLoadedFace@1@KAAUD3DXCOLOR@@PAPAUSLoadVertex@1@PAK3@Z ; GXU::SetVertexColor
  4856.   0027c    83 c4 18     add     esp, 24            ; 00000018H
  4857.  
  4858. ; 623  :                     if (FAILED(hr))
  4859.  
  4860.   0027f    85 c0         test     eax, eax
  4861.   00281    89 45 fc     mov     DWORD PTR _hr$[ebp], eax
  4862.   00284    0f 8c b9 05 00
  4863.     00         jl     $e_Exit$56695
  4864.   0028a    47         inc     edi
  4865.   0028b    83 ff 03     cmp     edi, 3
  4866.   0028e    72 cf         jb     SHORT $L57646
  4867. $L56705:
  4868.  
  4869. ; 614  :     {
  4870. ; 615  :         // propagate face color attributes into vertex attributes
  4871. ; 616  :         for (iFace = 0; iFace < cFaces; iFace++)
  4872.  
  4873.   00290    43         inc     ebx
  4874.   00291    83 c6 2c     add     esi, 44            ; 0000002cH
  4875.   00294    3b 5d 0c     cmp     ebx, DWORD PTR _cFaces$[ebp]
  4876.   00297    72 b8         jb     SHORT $L57653
  4877. $L57647:
  4878.  
  4879. ; 624  :                         goto e_Exit;
  4880. ; 625  :                 }
  4881. ; 626  :             }
  4882. ; 627  : 
  4883. ; 628  :         }
  4884. ; 629  :     }
  4885. ; 630  : 
  4886. ; 631  :     // after dealing face attributes, reset owned flags to false, and reprocess
  4887. ; 632  :     // the 
  4888. ; 633  :     for (iVertex = 0; iVertex < cVertices; iVertex++)
  4889.  
  4890.   00299    8b 4d 14     mov     ecx, DWORD PTR _cVertices$[ebp]
  4891.   0029c    85 c9         test     ecx, ecx
  4892.   0029e    76 12         jbe     SHORT $L56716
  4893.   002a0    33 c0         xor     eax, eax
  4894. $L56714:
  4895.  
  4896. ; 634  :     {
  4897. ; 635  :         rglvLoaded[iVertex].m_bOwned = false;
  4898.  
  4899.   002a2    8b 55 10     mov     edx, DWORD PTR _rglvLoaded$[ebp]
  4900.   002a5    8b 12         mov     edx, DWORD PTR [edx]
  4901.   002a7    c6 44 10 38 00     mov     BYTE PTR [eax+edx+56], 0
  4902.   002ac    83 c0 44     add     eax, 68            ; 00000044H
  4903.   002af    49         dec     ecx
  4904.   002b0    75 f0         jne     SHORT $L56714
  4905. $L56716:
  4906.  
  4907. ; 636  :     }
  4908. ; 637  : 
  4909. ; 638  :     // propogate corner attributes into vertex attributes
  4910. ; 639  :     for (iCorner = 0; iCorner < cCorners; iCorner++)
  4911.  
  4912.   002b2    83 65 f0 00     and     DWORD PTR _iCorner$[ebp], 0
  4913.   002b6    83 7d 1c 00     cmp     DWORD PTR _cCorners$[ebp], 0
  4914.   002ba    0f 86 9f 00 00
  4915.     00         jbe     $L57655
  4916.   002c0    8b 75 18     mov     esi, DWORD PTR _rgCorners$[ebp]
  4917.   002c3    83 c6 08     add     esi, 8
  4918. $L57649:
  4919.  
  4920. ; 640  :     {
  4921. ; 641  :         if (rgCorners[iCorner].m_bNormalSpecified || rgCorners[iCorner].m_bUvSpecified)
  4922.  
  4923.   002c6    33 c0         xor     eax, eax
  4924.   002c8    66 8b 06     mov     ax, WORD PTR [esi]
  4925.   002cb    89 45 f4     mov     DWORD PTR tv2424[ebp], eax
  4926.   002ce    83 65 f4 01     and     DWORD PTR tv2424[ebp], 1
  4927.   002d2    75 04         jne     SHORT $L56721
  4928.   002d4    a8 02         test     al, 2
  4929.   002d6    74 75         je     SHORT $L56718
  4930. $L56721:
  4931.  
  4932. ; 642  :         {
  4933. ; 643  :             iFace = rgCorners[iCorner].m_wFace;
  4934.  
  4935.   002d8    8b 46 fc     mov     eax, DWORD PTR [esi-4]
  4936.  
  4937. ; 644  :             if ((iFace >= cFaces) || (rglfFaces[iFace].m_wIndices[0] == UNUSED32))
  4938.  
  4939.   002db    3b 45 0c     cmp     eax, DWORD PTR _cFaces$[ebp]
  4940.   002de    73 6d         jae     SHORT $L56718
  4941.   002e0    8b 4d 08     mov     ecx, DWORD PTR _rglfFaces$[ebp]
  4942.   002e3    6b c0 2c     imul     eax, 44            ; 0000002cH
  4943.   002e6    8b 09         mov     ecx, DWORD PTR [ecx]
  4944.   002e8    8d 3c 08     lea     edi, DWORD PTR [eax+ecx]
  4945.   002eb    83 3f ff     cmp     DWORD PTR [edi], -1
  4946.   002ee    74 5d         je     SHORT $L56718
  4947.  
  4948. ; 645  :                 continue;
  4949. ; 646  : 
  4950. ; 647  :             iPoint = FindPoint(rglfFaces[iFace].m_wIndices, rgCorners[iCorner].m_wPoint, rglvLoaded);
  4951.  
  4952.   002f0    8b 5d 10     mov     ebx, DWORD PTR _rglvLoaded$[ebp]
  4953.   002f3    ff 33         push     DWORD PTR [ebx]
  4954.   002f5    ff 76 f8     push     DWORD PTR [esi-8]
  4955.   002f8    57         push     edi
  4956.   002f9    e8 00 00 00 00     call     ?FindPoint@GXU@@YAKPAKKPAUSLoadVertex@1@@Z ; GXU::FindPoint
  4957.  
  4958. ; 648  : 
  4959. ; 649  :             GXASSERT(iPoint < 3);
  4960. ; 650  : 
  4961. ; 651  :             pvNormal = NULL;
  4962.  
  4963.   002fe    33 d2         xor     edx, edx
  4964.   00300    83 c4 0c     add     esp, 12            ; 0000000cH
  4965.  
  4966. ; 652  :             if (rgCorners[iCorner].m_bNormalSpecified && cfvf.BNormal())
  4967.  
  4968.   00303    66 39 55 f4     cmp     WORD PTR tv2424[ebp], dx
  4969.   00307    89 45 d0     mov     DWORD PTR _iPoint$[ebp], eax
  4970.   0030a    74 0d         je     SHORT $L57650
  4971.   0030c    39 95 38 ff ff
  4972.     ff         cmp     DWORD PTR _cfvf$[ebp+8], edx
  4973.   00312    76 05         jbe     SHORT $L57650
  4974.  
  4975. ; 653  :             {
  4976. ; 654  :                 pvNormal = &rgCorners[iCorner].m_vNormal;
  4977.  
  4978.   00314    8d 4e 0c     lea     ecx, DWORD PTR [esi+12]
  4979.   00317    8b d1         mov     edx, ecx
  4980. $L57650:
  4981.  
  4982. ; 655  :             }
  4983. ; 656  :             
  4984. ; 657  :             puvTex1 = NULL;
  4985.  
  4986.   00319    33 c9         xor     ecx, ecx
  4987.  
  4988. ; 658  :             if (rgCorners[iCorner].m_bUvSpecified && cfvf.BTex1())
  4989.  
  4990.   0031b    f6 06 02     test     BYTE PTR [esi], 2
  4991.   0031e    74 0b         je     SHORT $L56726
  4992.   00320    39 8d 48 ff ff
  4993.     ff         cmp     DWORD PTR _cfvf$[ebp+24], ecx
  4994.   00326    76 03         jbe     SHORT $L56726
  4995.  
  4996. ; 659  :             {
  4997. ; 660  :                 puvTex1 = &rgCorners[iCorner].m_uvTex1;
  4998.  
  4999.   00328    8d 4e 04     lea     ecx, DWORD PTR [esi+4]
  5000. $L56726:
  5001.  
  5002. ; 661  :             }
  5003. ; 662  : 
  5004. ; 663  :             hr = SetVertexAttributes(&rglfFaces[iFace], iPoint, pvNormal, puvTex1, &rglvLoaded, &cVertices, &cVerticesMax);
  5005.  
  5006.   0032b    8d 45 ec     lea     eax, DWORD PTR _cVerticesMax$[ebp]
  5007.   0032e    50         push     eax
  5008.   0032f    8d 45 14     lea     eax, DWORD PTR _cVertices$[ebp]
  5009.   00332    50         push     eax
  5010.   00333    53         push     ebx
  5011.   00334    51         push     ecx
  5012.   00335    52         push     edx
  5013.   00336    ff 75 d0     push     DWORD PTR _iPoint$[ebp]
  5014.   00339    57         push     edi
  5015.   0033a    e8 00 00 00 00     call     ?SetVertexAttributes@GXU@@YAJPAUSLoadedFace@1@KPAUD3DXVECTOR3@@PAUD3DXVECTOR2@@PAPAUSLoadVertex@1@PAK4@Z ; GXU::SetVertexAttributes
  5016.   0033f    83 c4 1c     add     esp, 28            ; 0000001cH
  5017.  
  5018. ; 664  :             if (FAILED(hr))
  5019.  
  5020.   00342    85 c0         test     eax, eax
  5021.   00344    89 45 fc     mov     DWORD PTR _hr$[ebp], eax
  5022.   00347    0f 8c f6 04 00
  5023.     00         jl     $e_Exit$56695
  5024. $L56718:
  5025.  
  5026. ; 636  :     }
  5027. ; 637  : 
  5028. ; 638  :     // propogate corner attributes into vertex attributes
  5029. ; 639  :     for (iCorner = 0; iCorner < cCorners; iCorner++)
  5030.  
  5031.   0034d    ff 45 f0     inc     DWORD PTR _iCorner$[ebp]
  5032.   00350    8b 45 f0     mov     eax, DWORD PTR _iCorner$[ebp]
  5033.   00353    83 c6 20     add     esi, 32            ; 00000020H
  5034.   00356    3b 45 1c     cmp     eax, DWORD PTR _cCorners$[ebp]
  5035.   00359    0f 82 67 ff ff
  5036.     ff         jb     $L57649
  5037. $L57655:
  5038.  
  5039. ; 665  :                 goto e_Exit;
  5040. ; 666  :         }
  5041. ; 667  :     }
  5042. ; 668  : 
  5043. ; 669  : 
  5044. ; 670  :     if ((cFaces >= UNUSED16) || (cVertices >= UNUSED16))
  5045.  
  5046.   0035f    8b 55 0c     mov     edx, DWORD PTR _cFaces$[ebp]
  5047.   00362    8b 5d 08     mov     ebx, DWORD PTR _rglfFaces$[ebp]
  5048.   00365    b8 ff ff 00 00     mov     eax, 65535        ; 0000ffffH
  5049.   0036a    3b d0         cmp     edx, eax
  5050.   0036c    73 05         jae     SHORT $L56731
  5051.   0036e    39 45 14     cmp     DWORD PTR _cVertices$[ebp], eax
  5052.   00371    72 04         jb     SHORT $L57641
  5053. $L56731:
  5054.  
  5055. ; 671  :     {
  5056. ; 672  :         dwOptions |= D3DXMESH_32BIT;
  5057.  
  5058.   00373    83 4d 2c 01     or     DWORD PTR _dwOptions$[ebp], 1
  5059. $L57641:
  5060.  
  5061. ; 673  :     }
  5062. ; 674  : 
  5063. ; 675  :     // need to remove degenerate triangles
  5064. ; 676  :     cFacesActual = 0;
  5065.  
  5066.   00377    33 c9         xor     ecx, ecx
  5067.  
  5068. ; 677  :     for (iFace = 0; iFace < cFaces; iFace++)
  5069.  
  5070.   00379    3b d1         cmp     edx, ecx
  5071.   0037b    89 4d ec     mov     DWORD PTR _cFacesActual$[ebp], ecx
  5072.   0037e    0f 86 b8 04 00
  5073.     00         jbe     $L56739
  5074.  
  5075. ; 673  :     }
  5076. ; 674  : 
  5077. ; 675  :     // need to remove degenerate triangles
  5078. ; 676  :     cFacesActual = 0;
  5079.  
  5080.   00384    89 55 e0     mov     DWORD PTR tv435[ebp], edx
  5081. $L56732:
  5082.  
  5083. ; 678  :     {
  5084. ; 679  :         if ((rglfFaces[iFace].m_wIndices[0] == rglfFaces[iFace].m_wIndices[1])
  5085. ; 680  :             || (rglfFaces[iFace].m_wIndices[0] == rglfFaces[iFace].m_wIndices[2])
  5086. ; 681  :             || (rglfFaces[iFace].m_wIndices[1] == rglfFaces[iFace].m_wIndices[2]))
  5087.  
  5088.   00387    8b 03         mov     eax, DWORD PTR [ebx]
  5089.   00389    03 c1         add     eax, ecx
  5090.   0038b    8b 10         mov     edx, DWORD PTR [eax]
  5091.   0038d    8b 70 04     mov     esi, DWORD PTR [eax+4]
  5092.   00390    3b d6         cmp     edx, esi
  5093.   00392    74 10         je     SHORT $L56736
  5094.   00394    8b 78 08     mov     edi, DWORD PTR [eax+8]
  5095.   00397    3b d7         cmp     edx, edi
  5096.   00399    74 09         je     SHORT $L56736
  5097.   0039b    3b f7         cmp     esi, edi
  5098.   0039d    74 05         je     SHORT $L56736
  5099.  
  5100. ; 686  :         }
  5101. ; 687  :         else
  5102. ; 688  :         {
  5103. ; 689  :             cFacesActual += 1;
  5104.  
  5105.   0039f    ff 45 ec     inc     DWORD PTR _cFacesActual$[ebp]
  5106.   003a2    eb 11         jmp     SHORT $L56733
  5107. $L56736:
  5108.  
  5109. ; 682  :         {
  5110. ; 683  :             rglfFaces[iFace].m_wIndices[0] = UNUSED32;
  5111.  
  5112.   003a4    83 08 ff     or     DWORD PTR [eax], -1
  5113.  
  5114. ; 684  :             rglfFaces[iFace].m_wIndices[1] = UNUSED32;
  5115.  
  5116.   003a7    8b 03         mov     eax, DWORD PTR [ebx]
  5117.   003a9    83 4c 01 04 ff     or     DWORD PTR [ecx+eax+4], -1
  5118.  
  5119. ; 685  :             rglfFaces[iFace].m_wIndices[2] = UNUSED32;
  5120.  
  5121.   003ae    8b 03         mov     eax, DWORD PTR [ebx]
  5122.   003b0    83 4c 01 08 ff     or     DWORD PTR [ecx+eax+8], -1
  5123. $L56733:
  5124.   003b5    83 c1 2c     add     ecx, 44            ; 0000002cH
  5125.   003b8    ff 4d e0     dec     DWORD PTR tv435[ebp]
  5126.   003bb    75 ca         jne     SHORT $L56732
  5127.  
  5128. ; 690  :         }
  5129. ; 691  :     }
  5130. ; 692  : 
  5131. ; 693  :     if ((cFacesActual == 0) || (cVertices == 0))
  5132.  
  5133.   003bd    83 7d ec 00     cmp     DWORD PTR _cFacesActual$[ebp], 0
  5134.   003c1    0f 84 75 04 00
  5135.     00         je     $L56739
  5136.   003c7    83 7d 14 00     cmp     DWORD PTR _cVertices$[ebp], 0
  5137.   003cb    0f 84 6b 04 00
  5138.     00         je     $L56739
  5139.  
  5140. ; 696  :         goto e_Exit;
  5141. ; 697  :     }
  5142. ; 698  : 
  5143. ; 699  :     // create the mesh now that we know the correct size
  5144. ; 700  :     hr = D3DXCreateMeshFVF(cFacesActual, cVertices, dwOptions, dwFVF, pD3DDevice, &ptmMesh);
  5145.  
  5146.   003d1    8d 45 f8     lea     eax, DWORD PTR _ptmMesh$[ebp]
  5147.   003d4    50         push     eax
  5148.   003d5    ff 75 34     push     DWORD PTR _pD3DDevice$[ebp]
  5149.   003d8    ff 75 30     push     DWORD PTR _dwFVF$[ebp]
  5150.   003db    ff 75 2c     push     DWORD PTR _dwOptions$[ebp]
  5151.   003de    ff 75 14     push     DWORD PTR _cVertices$[ebp]
  5152.   003e1    ff 75 ec     push     DWORD PTR _cFacesActual$[ebp]
  5153.   003e4    e8 00 00 00 00     call     _D3DXCreateMeshFVF@24
  5154.  
  5155. ; 701  :     if (FAILED(hr))
  5156.  
  5157.   003e9    85 c0         test     eax, eax
  5158.   003eb    89 45 fc     mov     DWORD PTR _hr$[ebp], eax
  5159.   003ee    0f 8c 4f 04 00
  5160.     00         jl     $e_Exit$56695
  5161.  
  5162. ; 702  :         goto e_Exit;
  5163. ; 703  : 
  5164. ; 704  :     // get the vertex buffer, fill the vertices in place
  5165. ; 705  :     hr = ptmMesh->LockVertexBuffer(0, (PVOID*)&pvPoints);
  5166.  
  5167.   003f4    8b 45 f8     mov     eax, DWORD PTR _ptmMesh$[ebp]
  5168.   003f7    8b 08         mov     ecx, DWORD PTR [eax]
  5169.   003f9    8d 55 d4     lea     edx, DWORD PTR _pvPoints$[ebp]
  5170.   003fc    52         push     edx
  5171.   003fd    6a 00         push     0
  5172.   003ff    50         push     eax
  5173.   00400    ff 51 3c     call     DWORD PTR [ecx+60]
  5174.  
  5175. ; 706  :     if (FAILED(hr))
  5176.  
  5177.   00403    85 c0         test     eax, eax
  5178.   00405    89 45 fc     mov     DWORD PTR _hr$[ebp], eax
  5179.   00408    0f 8c 35 04 00
  5180.     00         jl     $e_Exit$56695
  5181.  
  5182. ; 707  :         goto e_Exit;
  5183. ; 708  : 
  5184. ; 709  :     // transform the points into the proper FVF format
  5185. ; 710  :     for (iPoint=0, pvCurPoint = pvPoints; iPoint < cVertices; iPoint++, pvCurPoint+=cfvf.m_cBytesPerVertex)
  5186.  
  5187.   0040e    83 7d 14 00     cmp     DWORD PTR _cVertices$[ebp], 0
  5188.   00412    8b 45 d4     mov     eax, DWORD PTR _pvPoints$[ebp]
  5189.   00415    89 45 e4     mov     DWORD PTR _pvCurPoint$[ebp], eax
  5190.   00418    0f 86 cc 01 00
  5191.     00         jbe     $L57652
  5192.   0041e    8b 8d 40 ff ff
  5193.     ff         mov     ecx, DWORD PTR _cfvf$[ebp+16]
  5194.   00424    83 65 fc 00     and     DWORD PTR tv2038[ebp], 0
  5195.   00428    03 c1         add     eax, ecx
  5196.   0042a    89 45 f0     mov     DWORD PTR tv2069[ebp], eax
  5197.   0042d    8b 85 44 ff ff
  5198.     ff         mov     eax, DWORD PTR _cfvf$[ebp+20]
  5199.   00433    2b c1         sub     eax, ecx
  5200.   00435    89 45 94     mov     DWORD PTR tv2083[ebp], eax
  5201.   00438    8b 85 48 ff ff
  5202.     ff         mov     eax, DWORD PTR _cfvf$[ebp+24]
  5203.   0043e    c7 45 e0 0c 00
  5204.     00 00         mov     DWORD PTR tv2080[ebp], 12 ; 0000000cH
  5205.   00445    29 4d e0     sub     DWORD PTR tv2080[ebp], ecx
  5206.   00448    2b c1         sub     eax, ecx
  5207.   0044a    89 45 98     mov     DWORD PTR tv2087[ebp], eax
  5208.   0044d    8b 45 14     mov     eax, DWORD PTR _cVertices$[ebp]
  5209.   00450    89 45 d0     mov     DWORD PTR tv216[ebp], eax
  5210. $L56748:
  5211.  
  5212. ; 711  :     {
  5213. ; 712  :         cfvf.SetPosition(pvCurPoint, &rglvLoaded[iPoint].m_vPos);
  5214.  
  5215.   00453    8b 5d 10     mov     ebx, DWORD PTR _rglvLoaded$[ebp]
  5216.   00456    8b 33         mov     esi, DWORD PTR [ebx]
  5217.   00458    8b 45 fc     mov     eax, DWORD PTR tv2038[ebp]
  5218.   0045b    8b 7d e4     mov     edi, DWORD PTR _pvCurPoint$[ebp]
  5219.   0045e    03 f0         add     esi, eax
  5220.   00460    a5         movsd
  5221.   00461    a5         movsd
  5222.   00462    a5         movsd
  5223.  
  5224. ; 713  : 
  5225. ; 714  :         cfvf.SetNormal(pvCurPoint, &rglvLoaded[iPoint].m_vNormal);
  5226.  
  5227.   00463    8b 0b         mov     ecx, DWORD PTR [ebx]
  5228.   00465    8d 44 08 24     lea     eax, DWORD PTR [eax+ecx+36]
  5229.   00469    50         push     eax
  5230.   0046a    ff 75 e4     push     DWORD PTR _pvCurPoint$[ebp]
  5231.   0046d    8d 8d 30 ff ff
  5232.     ff         lea     ecx, DWORD PTR _cfvf$[ebp]
  5233.   00473    e8 00 00 00 00     call     ?SetNormal@DXCrackFVF@@QAEXPAXPAUD3DXVECTOR3@@@Z ; DXCrackFVF::SetNormal
  5234.  
  5235. ; 715  :         cfvf.SetDiffuse(pvCurPoint, ConvertColor(rglvLoaded[iPoint].m_color));
  5236.  
  5237.   00478    83 bd 40 ff ff
  5238.     ff 00         cmp     DWORD PTR _cfvf$[ebp+16], 0
  5239.   0047f    74 15         je     SHORT $L57645
  5240.   00481    8b 4d fc     mov     ecx, DWORD PTR tv2038[ebp]
  5241.   00484    8b 03         mov     eax, DWORD PTR [ebx]
  5242.   00486    8d 44 01 0c     lea     eax, DWORD PTR [ecx+eax+12]
  5243.   0048a    50         push     eax
  5244.   0048b    e8 00 00 00 00     call     ?ConvertColor@GXU@@YAKAAUD3DXCOLOR@@@Z ; GXU::ConvertColor
  5245.   00490    59         pop     ecx
  5246.   00491    8b 4d f0     mov     ecx, DWORD PTR tv2069[ebp]
  5247.   00494    89 01         mov     DWORD PTR [ecx], eax
  5248. $L57645:
  5249.  
  5250. ; 716  :         cfvf.SetTex1(pvCurPoint, &rglvLoaded[iPoint].m_uvTex1);
  5251.  
  5252.   00496    8b 03         mov     eax, DWORD PTR [ebx]
  5253.   00498    8b 4d fc     mov     ecx, DWORD PTR tv2038[ebp]
  5254.   0049b    8d 44 01 1c     lea     eax, DWORD PTR [ecx+eax+28]
  5255.   0049f    50         push     eax
  5256.   004a0    ff 75 e4     push     DWORD PTR _pvCurPoint$[ebp]
  5257.   004a3    8d 8d 30 ff ff
  5258.     ff         lea     ecx, DWORD PTR _cfvf$[ebp]
  5259.   004a9    e8 00 00 00 00     call     ?SetTex1@DXCrackFVF@@QAEXPAXPAUD3DXVECTOR2@@@Z ; DXCrackFVF::SetTex1
  5260.  
  5261. ; 717  : 
  5262. ; 718  :         if (pFVFData != NULL)
  5263.  
  5264.   004ae    83 7d 20 00     cmp     DWORD PTR _pFVFData$[ebp], 0
  5265.   004b2    0f 84 19 01 00
  5266.     00         je     $L56749
  5267.  
  5268. ; 719  :         {
  5269. ; 720  :             pbCur = (PBYTE)&pFVFData->rgiFVFData[pFVFData->cBytesPerVertex/sizeof(DWORD) * rglvLoaded[iPoint].m_iFVFDataOffset];
  5270.  
  5271.   004b8    8b 45 20     mov     eax, DWORD PTR _pFVFData$[ebp]
  5272.   004bb    8b 48 04     mov     ecx, DWORD PTR [eax+4]
  5273.   004be    8b 55 10     mov     edx, DWORD PTR _rglvLoaded$[ebp]
  5274.   004c1    8b 12         mov     edx, DWORD PTR [edx]
  5275.   004c3    8b 75 fc     mov     esi, DWORD PTR tv2038[ebp]
  5276.   004c6    8b 40 08     mov     eax, DWORD PTR [eax+8]
  5277.   004c9    c1 e9 02     shr     ecx, 2
  5278.   004cc    0f af 4c 16 40     imul     ecx, DWORD PTR [esi+edx+64]
  5279.  
  5280. ; 721  : 
  5281. ; 722  :             if (cfvfOtherData.CWeights() > 0)
  5282.  
  5283.   004d1    33 ff         xor     edi, edi
  5284.   004d3    39 bd 28 ff ff
  5285.     ff         cmp     DWORD PTR _cfvfOtherData$[ebp+56], edi
  5286.   004d9    8d 1c 88     lea     ebx, DWORD PTR [eax+ecx*4]
  5287.   004dc    76 32         jbe     SHORT $L57643
  5288.  
  5289. ; 723  :             {
  5290. ; 724  :                 for (iWeight = 0; iWeight < cfvfOtherData.CWeights(); iWeight++)
  5291.  
  5292.   004de    33 c9         xor     ecx, ecx
  5293.   004e0    39 bd 28 ff ff
  5294.     ff         cmp     DWORD PTR _cfvfOtherData$[ebp+56], edi
  5295.   004e6    76 28         jbe     SHORT $L57643
  5296.   004e8    8b 45 e0     mov     eax, DWORD PTR tv2080[ebp]
  5297.   004eb    8b 75 f0     mov     esi, DWORD PTR tv2069[ebp]
  5298.   004ee    03 c6         add     eax, esi
  5299. $L56755:
  5300.  
  5301. ; 725  :                 {
  5302. ; 726  :                     cfvf.SetWeight(pvCurPoint, iWeight, *(float*)pbCur);
  5303.  
  5304.   004f0    3b 8d 68 ff ff
  5305.     ff         cmp     ecx, DWORD PTR _cfvf$[ebp+56]
  5306.   004f6    8b 13         mov     edx, DWORD PTR [ebx]
  5307.   004f8    89 55 9c     mov     DWORD PTR $T57567[ebp], edx
  5308.   004fb    73 02         jae     SHORT $L57566
  5309.   004fd    89 10         mov     DWORD PTR [eax], edx
  5310. $L57566:
  5311.  
  5312. ; 727  :                     pbCur += sizeof(float);
  5313.  
  5314.   004ff    83 c3 04     add     ebx, 4
  5315.   00502    41         inc     ecx
  5316.   00503    83 c0 04     add     eax, 4
  5317.   00506    3b 8d 28 ff ff
  5318.     ff         cmp     ecx, DWORD PTR _cfvfOtherData$[ebp+56]
  5319.   0050c    72 e2         jb     SHORT $L56755
  5320.  
  5321. ; 723  :             {
  5322. ; 724  :                 for (iWeight = 0; iWeight < cfvfOtherData.CWeights(); iWeight++)
  5323.  
  5324.   0050e    eb 03         jmp     SHORT $L56757
  5325. $L57643:
  5326.   00510    8b 75 f0     mov     esi, DWORD PTR tv2069[ebp]
  5327. $L56757:
  5328.  
  5329. ; 728  :                 }
  5330. ; 729  :             }
  5331. ; 730  : 
  5332. ; 731  :             if (cfvfOtherData.BNormal())
  5333.  
  5334.   00513    39 bd f8 fe ff
  5335.     ff         cmp     DWORD PTR _cfvfOtherData$[ebp+8], edi
  5336.   00519    76 12         jbe     SHORT $L56760
  5337.  
  5338. ; 732  :             {
  5339. ; 733  :                 cfvf.SetNormal(pvCurPoint, (D3DXVECTOR3*)pbCur);
  5340.  
  5341.   0051b    53         push     ebx
  5342.   0051c    ff 75 e4     push     DWORD PTR _pvCurPoint$[ebp]
  5343.   0051f    8d 8d 30 ff ff
  5344.     ff         lea     ecx, DWORD PTR _cfvf$[ebp]
  5345.   00525    e8 00 00 00 00     call     ?SetNormal@DXCrackFVF@@QAEXPAXPAUD3DXVECTOR3@@@Z ; DXCrackFVF::SetNormal
  5346.  
  5347. ; 734  :                 pbCur += sizeof(D3DXVECTOR3);
  5348.  
  5349.   0052a    83 c3 0c     add     ebx, 12            ; 0000000cH
  5350. $L56760:
  5351.  
  5352. ; 735  :             }
  5353. ; 736  : 
  5354. ; 737  :             if (cfvfOtherData.BDiffuse())
  5355.  
  5356.   0052d    39 bd 00 ff ff
  5357.     ff         cmp     DWORD PTR _cfvfOtherData$[ebp+16], edi
  5358.   00533    76 0f         jbe     SHORT $L57656
  5359.  
  5360. ; 738  :             {
  5361. ; 739  :                 cfvf.SetDiffuse(pvCurPoint, *(D3DCOLOR*)pbCur);
  5362.  
  5363.   00535    39 bd 40 ff ff
  5364.     ff         cmp     DWORD PTR _cfvf$[ebp+16], edi
  5365.   0053b    74 04         je     SHORT $L57577
  5366.   0053d    8b 03         mov     eax, DWORD PTR [ebx]
  5367.   0053f    89 06         mov     DWORD PTR [esi], eax
  5368. $L57577:
  5369.  
  5370. ; 740  :                 pbCur += sizeof(D3DCOLOR);
  5371.  
  5372.   00541    83 c3 04     add     ebx, 4
  5373. $L57656:
  5374.  
  5375. ; 741  :             }
  5376. ; 742  : 
  5377. ; 743  :             if (cfvfOtherData.BSpecular())
  5378.  
  5379.   00544    39 bd 04 ff ff
  5380.     ff         cmp     DWORD PTR _cfvfOtherData$[ebp+20], edi
  5381.   0054a    76 13         jbe     SHORT $L56766
  5382.  
  5383. ; 744  :             {
  5384. ; 745  :                 cfvf.SetSpecular(pvCurPoint, *(D3DCOLOR*)pbCur);
  5385.  
  5386.   0054c    39 bd 44 ff ff
  5387.     ff         cmp     DWORD PTR _cfvf$[ebp+20], edi
  5388.   00552    74 08         je     SHORT $L57585
  5389.   00554    8b 03         mov     eax, DWORD PTR [ebx]
  5390.   00556    8b 4d 94     mov     ecx, DWORD PTR tv2083[ebp]
  5391.   00559    89 04 31     mov     DWORD PTR [ecx+esi], eax
  5392. $L57585:
  5393.  
  5394. ; 746  :                 pbCur += sizeof(D3DCOLOR);
  5395.  
  5396.   0055c    83 c3 04     add     ebx, 4
  5397. $L56766:
  5398.  
  5399. ; 747  :             }
  5400. ; 748  : 
  5401. ; 749  :             if (cfvfOtherData.CTexCoords() > 0)
  5402.  
  5403.   0055f    39 bd 2c ff ff
  5404.     ff         cmp     DWORD PTR _cfvfOtherData$[ebp+60], edi
  5405.   00565    76 6a         jbe     SHORT $L56749
  5406.  
  5407. ; 750  :             {
  5408. ; 751  :                 // UNDONE UNDONE - fix when 3d tex coords are handled
  5409. ; 752  :                 //iInitialTexCoord = cfvf.BTex1() ? 1 : 0;
  5410. ; 753  :                 iInitialTexCoord = pFVFData->iTexCoordOffset;
  5411.  
  5412.   00567    8b 45 20     mov     eax, DWORD PTR _pFVFData$[ebp]
  5413.   0056a    8b 70 0c     mov     esi, DWORD PTR [eax+12]
  5414.   0056d    8b 45 98     mov     eax, DWORD PTR tv2087[ebp]
  5415.   00570    8b 4d f0     mov     ecx, DWORD PTR tv2069[ebp]
  5416.   00573    03 c1         add     eax, ecx
  5417.  
  5418. ; 754  : 
  5419. ; 755  :                 pbTexCur = (PBYTE)cfvf.PuvGetTex1(pvCurPoint);
  5420. ; 756  : 
  5421. ; 757  :                 // if offset into the FVF, then move the texture pointer to the correct
  5422. ; 758  :                 //    starting position. i.e. 2d coord from template and other coords from fvf data
  5423. ; 759  :                 for (iTexCoord = 0; iTexCoord < iInitialTexCoord; iTexCoord++)
  5424.  
  5425.   00575    33 ff         xor     edi, edi
  5426.   00577    85 f6         test     esi, esi
  5427.   00579    89 45 f4     mov     DWORD PTR _pbTexCur$[ebp], eax
  5428.   0057c    76 14         jbe     SHORT $L56773
  5429. $L56771:
  5430.  
  5431. ; 760  :                 {
  5432. ; 761  :                     pbTexCur += cfvf.CbTexCoordSize(iTexCoord);
  5433.  
  5434.   0057e    57         push     edi
  5435.   0057f    8d 8d 30 ff ff
  5436.     ff         lea     ecx, DWORD PTR _cfvf$[ebp]
  5437.   00585    e8 00 00 00 00     call     ?CbTexCoordSize@DXCrackFVF@@QAEKK@Z ; DXCrackFVF::CbTexCoordSize
  5438.   0058a    01 45 f4     add     DWORD PTR _pbTexCur$[ebp], eax
  5439.   0058d    47         inc     edi
  5440.   0058e    3b fe         cmp     edi, esi
  5441.   00590    72 ec         jb     SHORT $L56771
  5442. $L56773:
  5443.  
  5444. ; 762  :                 }
  5445. ; 763  : 
  5446. ; 764  :                 for (iTexCoord = 0; iTexCoord < cfvfOtherData.CTexCoords(); iTexCoord++)
  5447.  
  5448.   00592    33 c0         xor     eax, eax
  5449.   00594    39 85 2c ff ff
  5450.     ff         cmp     DWORD PTR _cfvfOtherData$[ebp+60], eax
  5451.   0059a    89 45 b8     mov     DWORD PTR _iTexCoord$[ebp], eax
  5452.   0059d    76 32         jbe     SHORT $L56749
  5453. $L56774:
  5454.  
  5455. ; 765  :                 {
  5456. ; 766  :                     memcpy(pbTexCur, pbCur, sizeof(BYTE) * rgdwTexCoordSizesOtherData[iTexCoord]);
  5457.  
  5458.   0059f    8b 7d f4     mov     edi, DWORD PTR _pbTexCur$[ebp]
  5459.   005a2    8d 84 85 d0 fe
  5460.     ff ff         lea     eax, DWORD PTR _rgdwTexCoordSizesOtherData$[ebp+eax*4]
  5461.   005a9    8b 08         mov     ecx, DWORD PTR [eax]
  5462.   005ab    8b d1         mov     edx, ecx
  5463.   005ad    c1 e9 02     shr     ecx, 2
  5464.   005b0    8b f3         mov     esi, ebx
  5465.   005b2    f3 a5         rep movsd
  5466.  
  5467. ; 767  :                     pbTexCur += rgdwTexCoordSizesOtherData[iTexCoord];
  5468.  
  5469.   005b4    8b c2         mov     eax, edx
  5470.   005b6    01 45 f4     add     DWORD PTR _pbTexCur$[ebp], eax
  5471.  
  5472. ; 768  :                     pbCur += rgdwTexCoordSizesOtherData[iTexCoord];
  5473.  
  5474.   005b9    03 d8         add     ebx, eax
  5475.   005bb    8b 45 b8     mov     eax, DWORD PTR _iTexCoord$[ebp]
  5476.   005be    8b ca         mov     ecx, edx
  5477.   005c0    83 e1 03     and     ecx, 3
  5478.   005c3    40         inc     eax
  5479.   005c4    3b 85 2c ff ff
  5480.     ff         cmp     eax, DWORD PTR _cfvfOtherData$[ebp+60]
  5481.   005ca    f3 a4         rep movsb
  5482.   005cc    89 45 b8     mov     DWORD PTR _iTexCoord$[ebp], eax
  5483.   005cf    72 ce         jb     SHORT $L56774
  5484. $L56749:
  5485.  
  5486. ; 707  :         goto e_Exit;
  5487. ; 708  : 
  5488. ; 709  :     // transform the points into the proper FVF format
  5489. ; 710  :     for (iPoint=0, pvCurPoint = pvPoints; iPoint < cVertices; iPoint++, pvCurPoint+=cfvf.m_cBytesPerVertex)
  5490.  
  5491.   005d1    8b 85 34 ff ff
  5492.     ff         mov     eax, DWORD PTR _cfvf$[ebp+4]
  5493.   005d7    83 45 fc 44     add     DWORD PTR tv2038[ebp], 68 ; 00000044H
  5494.   005db    01 45 e4     add     DWORD PTR _pvCurPoint$[ebp], eax
  5495.   005de    01 45 f0     add     DWORD PTR tv2069[ebp], eax
  5496.   005e1    ff 4d d0     dec     DWORD PTR tv216[ebp]
  5497.   005e4    0f 85 69 fe ff
  5498.     ff         jne     $L56748
  5499. $L57652:
  5500.  
  5501. ; 769  :                 }
  5502. ; 770  :             }
  5503. ; 771  :         }
  5504. ; 772  :     }
  5505. ; 773  : 
  5506. ; 774  :     hr = ptmMesh->LockIndexBuffer(0, (LPVOID*)&pvFaces);
  5507.  
  5508.   005ea    8b 45 f8     mov     eax, DWORD PTR _ptmMesh$[ebp]
  5509.   005ed    8b 08         mov     ecx, DWORD PTR [eax]
  5510.   005ef    8d 55 d8     lea     edx, DWORD PTR _pvFaces$[ebp]
  5511.   005f2    52         push     edx
  5512.   005f3    6a 00         push     0
  5513.   005f5    50         push     eax
  5514.   005f6    ff 51 44     call     DWORD PTR [ecx+68]
  5515.  
  5516. ; 775  :     if (FAILED(hr))
  5517.  
  5518.   005f9    85 c0         test     eax, eax
  5519.   005fb    89 45 fc     mov     DWORD PTR _hr$[ebp], eax
  5520.   005fe    0f 8c 3f 02 00
  5521.     00         jl     $e_Exit$56695
  5522.  
  5523. ; 776  :         goto e_Exit;
  5524. ; 777  : 
  5525. ; 778  :     hr = ptmMesh->LockAttributeBuffer(0, &rgiAttribIds);
  5526.  
  5527.   00604    8b 45 f8     mov     eax, DWORD PTR _ptmMesh$[ebp]
  5528.   00607    8b 08         mov     ecx, DWORD PTR [eax]
  5529.   00609    8d 55 dc     lea     edx, DWORD PTR _rgiAttribIds$[ebp]
  5530.   0060c    52         push     edx
  5531.   0060d    6a 00         push     0
  5532.   0060f    50         push     eax
  5533.   00610    ff 51 60     call     DWORD PTR [ecx+96]
  5534.  
  5535. ; 779  :     if (FAILED(hr))
  5536.  
  5537.   00613    85 c0         test     eax, eax
  5538.   00615    89 45 fc     mov     DWORD PTR _hr$[ebp], eax
  5539.   00618    0f 8c 25 02 00
  5540.     00         jl     $e_Exit$56695
  5541.  
  5542. ; 780  :         goto e_Exit;
  5543. ; 781  : 
  5544. ; 782  :     // copy the material data to arrays understood by ID3DXMesh::SetMesh
  5545. ; 783  :     for (iFace = iFaceActual = 0; iFace < cFaces; iFace++)
  5546.  
  5547.   0061e    8b 7d 0c     mov     edi, DWORD PTR _cFaces$[ebp]
  5548.   00621    8b 75 08     mov     esi, DWORD PTR _rglfFaces$[ebp]
  5549.   00624    33 db         xor     ebx, ebx
  5550.   00626    33 d2         xor     edx, edx
  5551.   00628    33 c9         xor     ecx, ecx
  5552.   0062a    89 7d 20     mov     DWORD PTR tv757[ebp], edi
  5553. $L56785:
  5554.  
  5555. ; 784  :     {
  5556. ; 785  :         if (rglfFaces[iFace].m_wIndices[0] == UNUSED32)
  5557.  
  5558.   0062d    8b 06         mov     eax, DWORD PTR [esi]
  5559.   0062f    03 c1         add     eax, ecx
  5560.   00631    83 38 ff     cmp     DWORD PTR [eax], -1
  5561.   00634    74 1c         je     SHORT $L56786
  5562.  
  5563. ; 786  :             continue;
  5564. ; 787  : 
  5565. ; 788  :         if (rglfFaces[iFace].m_bAttributeSpecified)
  5566.  
  5567.   00636    f6 40 0c 04     test     BYTE PTR [eax+12], 4
  5568.   0063a    74 0d         je     SHORT $L56789
  5569.  
  5570. ; 789  :         {
  5571. ; 790  :             rgiAttribIds[iFaceActual] = rglfFaces[iFace].m_attr;
  5572.  
  5573.   0063c    8b 5d dc     mov     ebx, DWORD PTR _rgiAttribIds$[ebp]
  5574.   0063f    8b 40 24     mov     eax, DWORD PTR [eax+36]
  5575.   00642    89 04 1a     mov     DWORD PTR [edx+ebx], eax
  5576.  
  5577. ; 791  :         }
  5578. ; 792  :         else
  5579.  
  5580.   00645    33 db         xor     ebx, ebx
  5581.   00647    eb 06         jmp     SHORT $L56790
  5582. $L56789:
  5583.  
  5584. ; 793  :         {
  5585. ; 794  :             //rgiAttribIds[iFace] = UNUSED32;
  5586. ; 795  :             rgiAttribIds[iFaceActual] = 0;
  5587.  
  5588.   00649    8b 45 dc     mov     eax, DWORD PTR _rgiAttribIds$[ebp]
  5589.   0064c    89 1c 02     mov     DWORD PTR [edx+eax], ebx
  5590. $L56790:
  5591.  
  5592. ; 796  :         }
  5593. ; 797  : 
  5594. ; 798  :         iFaceActual += 1;
  5595.  
  5596.   0064f    83 c2 04     add     edx, 4
  5597. $L56786:
  5598.  
  5599. ; 780  :         goto e_Exit;
  5600. ; 781  : 
  5601. ; 782  :     // copy the material data to arrays understood by ID3DXMesh::SetMesh
  5602. ; 783  :     for (iFace = iFaceActual = 0; iFace < cFaces; iFace++)
  5603.  
  5604.   00652    83 c1 2c     add     ecx, 44            ; 0000002cH
  5605.   00655    ff 4d 20     dec     DWORD PTR tv757[ebp]
  5606.   00658    75 d3         jne     SHORT $L56785
  5607.  
  5608. ; 799  :     }
  5609. ; 800  : 
  5610. ; 801  :     if ( dwOptions & D3DXMESH_32BIT)
  5611.  
  5612.   0065a    f6 45 2c 01     test     BYTE PTR _dwOptions$[ebp], 1
  5613.  
  5614. ; 802  :     {
  5615. ; 803  :         rgdwFaces = (DWORD*)pvFaces;
  5616. ; 804  : 
  5617. ; 805  :         for (iFace = 0, pdwFaceCur = rgdwFaces; iFace < cFaces; iFace++)
  5618.  
  5619.   0065e    8b 45 d8     mov     eax, DWORD PTR _pvFaces$[ebp]
  5620.   00661    74 2e         je     SHORT $L56791
  5621.   00663    83 c0 08     add     eax, 8
  5622.   00666    33 c9         xor     ecx, ecx
  5623. $L56793:
  5624.  
  5625. ; 806  :         {
  5626. ; 807  :             if (rglfFaces[iFace].m_wIndices[0] == UNUSED32)
  5627.  
  5628.   00668    8b 16         mov     edx, DWORD PTR [esi]
  5629.   0066a    8b 14 11     mov     edx, DWORD PTR [ecx+edx]
  5630.   0066d    83 fa ff     cmp     edx, -1
  5631.   00670    74 17         je     SHORT $L56794
  5632.  
  5633. ; 808  :                 continue;
  5634. ; 809  : 
  5635. ; 810  :             pdwFaceCur[0] = rglfFaces[iFace].m_wIndices[0];
  5636.  
  5637.   00672    89 50 f8     mov     DWORD PTR [eax-8], edx
  5638.  
  5639. ; 811  :             pdwFaceCur[1] = rglfFaces[iFace].m_wIndices[1];
  5640.  
  5641.   00675    8b 16         mov     edx, DWORD PTR [esi]
  5642.   00677    8b 54 0a 04     mov     edx, DWORD PTR [edx+ecx+4]
  5643.   0067b    89 50 fc     mov     DWORD PTR [eax-4], edx
  5644.  
  5645. ; 812  :             pdwFaceCur[2] = rglfFaces[iFace].m_wIndices[2];
  5646.  
  5647.   0067e    8b 16         mov     edx, DWORD PTR [esi]
  5648.   00680    8b 54 0a 08     mov     edx, DWORD PTR [edx+ecx+8]
  5649.   00684    89 10         mov     DWORD PTR [eax], edx
  5650.  
  5651. ; 813  :             pdwFaceCur += 3;
  5652.  
  5653.   00686    83 c0 0c     add     eax, 12            ; 0000000cH
  5654. $L56794:
  5655.   00689    83 c1 2c     add     ecx, 44            ; 0000002cH
  5656.   0068c    4f         dec     edi
  5657.   0068d    75 d9         jne     SHORT $L56793
  5658.  
  5659. ; 814  :         }
  5660. ; 815  :     }
  5661. ; 816  :     else // 16 bit indices
  5662.  
  5663.   0068f    eb 33         jmp     SHORT $L56801
  5664. $L56791:
  5665.  
  5666. ; 817  :     {
  5667. ; 818  :         rgwFaces = (UINT16*)pvFaces;
  5668. ; 819  : 
  5669. ; 820  :         for (iFace = 0, pwFaceCur = rgwFaces; iFace < cFaces; iFace++)
  5670.  
  5671.   00691    83 c0 04     add     eax, 4
  5672.   00694    33 c9         xor     ecx, ecx
  5673. $L56799:
  5674.  
  5675. ; 821  :         {
  5676. ; 822  :             if (rglfFaces[iFace].m_wIndices[0] == UNUSED32)
  5677.  
  5678.   00696    8b 16         mov     edx, DWORD PTR [esi]
  5679.   00698    03 d1         add     edx, ecx
  5680.   0069a    83 3a ff     cmp     DWORD PTR [edx], -1
  5681.   0069d    74 1f         je     SHORT $L56800
  5682.  
  5683. ; 823  :                 continue;
  5684. ; 824  : 
  5685. ; 825  :             pwFaceCur[0] = (UINT16)rglfFaces[iFace].m_wIndices[0];
  5686.  
  5687.   0069f    66 8b 12     mov     dx, WORD PTR [edx]
  5688.   006a2    66 89 50 fc     mov     WORD PTR [eax-4], dx
  5689.  
  5690. ; 826  :             pwFaceCur[1] = (UINT16)rglfFaces[iFace].m_wIndices[1];
  5691.  
  5692.   006a6    8b 16         mov     edx, DWORD PTR [esi]
  5693.   006a8    66 8b 54 0a 04     mov     dx, WORD PTR [edx+ecx+4]
  5694.   006ad    66 89 50 fe     mov     WORD PTR [eax-2], dx
  5695.  
  5696. ; 827  :             pwFaceCur[2] = (UINT16)rglfFaces[iFace].m_wIndices[2];
  5697.  
  5698.   006b1    8b 16         mov     edx, DWORD PTR [esi]
  5699.   006b3    66 8b 54 0a 08     mov     dx, WORD PTR [edx+ecx+8]
  5700.   006b8    66 89 10     mov     WORD PTR [eax], dx
  5701.  
  5702. ; 828  : 
  5703. ; 829  :             pwFaceCur += 3;
  5704.  
  5705.   006bb    83 c0 06     add     eax, 6
  5706. $L56800:
  5707.   006be    83 c1 2c     add     ecx, 44            ; 0000002cH
  5708.   006c1    4f         dec     edi
  5709.   006c2    75 d2         jne     SHORT $L56799
  5710. $L56801:
  5711.  
  5712. ; 830  :         }
  5713. ; 831  :     }
  5714. ; 832  : 
  5715. ; 833  :     ptmMesh->UnlockAttributeBuffer();
  5716.  
  5717.   006c4    8b 45 f8     mov     eax, DWORD PTR _ptmMesh$[ebp]
  5718.   006c7    8b 08         mov     ecx, DWORD PTR [eax]
  5719.   006c9    50         push     eax
  5720.   006ca    ff 51 64     call     DWORD PTR [ecx+100]
  5721.  
  5722. ; 834  :     rgiAttribIds = NULL;
  5723. ; 835  :     ptmMesh->UnlockIndexBuffer();
  5724.  
  5725.   006cd    8b 45 f8     mov     eax, DWORD PTR _ptmMesh$[ebp]
  5726.   006d0    89 5d dc     mov     DWORD PTR _rgiAttribIds$[ebp], ebx
  5727.   006d3    8b 08         mov     ecx, DWORD PTR [eax]
  5728.   006d5    50         push     eax
  5729.   006d6    ff 51 48     call     DWORD PTR [ecx+72]
  5730.  
  5731. ; 836  :     pvFaces = NULL;
  5732. ; 837  :     ptmMesh->UnlockVertexBuffer();
  5733.  
  5734.   006d9    8b 45 f8     mov     eax, DWORD PTR _ptmMesh$[ebp]
  5735.   006dc    89 5d d8     mov     DWORD PTR _pvFaces$[ebp], ebx
  5736.   006df    8b 08         mov     ecx, DWORD PTR [eax]
  5737.   006e1    50         push     eax
  5738.   006e2    ff 51 40     call     DWORD PTR [ecx+64]
  5739.  
  5740. ; 838  :     pvPoints = NULL;
  5741. ; 839  : 
  5742. ; 840  :     // if adjacency information is desired, generate it from point rep information
  5743. ; 841  :     if (ppbufAdjacency != NULL)
  5744.  
  5745.   006e5    39 5d 3c     cmp     DWORD PTR _ppbufAdjacency$[ebp], ebx
  5746.   006e8    89 5d d4     mov     DWORD PTR _pvPoints$[ebp], ebx
  5747.   006eb    0f 84 41 01 00
  5748.     00         je     $L56806
  5749.  
  5750. ; 842  :     {
  5751. ; 843  :         hr = D3DXCreateBuffer(cFacesActual * 3 * sizeof(DWORD), &pbufAdjacency);
  5752.  
  5753.   006f1    8b 75 ec     mov     esi, DWORD PTR _cFacesActual$[ebp]
  5754.   006f4    8d 45 e8     lea     eax, DWORD PTR _pbufAdjacency$[ebp]
  5755.   006f7    8d 34 76     lea     esi, DWORD PTR [esi+esi*2]
  5756.   006fa    50         push     eax
  5757.   006fb    c1 e6 02     shl     esi, 2
  5758.   006fe    56         push     esi
  5759.   006ff    e8 00 00 00 00     call     _D3DXCreateBuffer@8
  5760.  
  5761. ; 844  :         if (FAILED(hr))
  5762.  
  5763.   00704    3b c3         cmp     eax, ebx
  5764.   00706    89 45 fc     mov     DWORD PTR _hr$[ebp], eax
  5765.   00709    0f 8c 34 01 00
  5766.     00         jl     $e_Exit$56695
  5767.  
  5768. ; 845  :             goto e_Exit;
  5769. ; 846  :         
  5770. ; 847  :         pdwAdjacency = (DWORD*)pbufAdjacency->GetBufferPointer();
  5771.  
  5772.   0070f    8b 45 e8     mov     eax, DWORD PTR _pbufAdjacency$[ebp]
  5773.   00712    8b 08         mov     ecx, DWORD PTR [eax]
  5774.   00714    50         push     eax
  5775.   00715    ff 51 0c     call     DWORD PTR [ecx+12]
  5776.  
  5777. ; 848  :         GXASSERT(cFacesActual * 3 * sizeof(DWORD) == pbufAdjacency->GetBufferSize());
  5778. ; 849  : 
  5779. ; 850  :         rgdwPointRepsTemp = new DWORD[cVertices];
  5780.  
  5781.   00718    8b 7d 14     mov     edi, DWORD PTR _cVertices$[ebp]
  5782.   0071b    89 45 20     mov     DWORD PTR _pdwAdjacency$[ebp], eax
  5783.   0071e    8b c7         mov     eax, edi
  5784.   00720    c1 e0 02     shl     eax, 2
  5785.   00723    50         push     eax
  5786.   00724    e8 00 00 00 00     call     ??2@YAPAXI@Z        ; operator new
  5787.   00729    8b d0         mov     edx, eax
  5788.  
  5789. ; 851  :         if (rgdwPointRepsTemp == NULL)
  5790.  
  5791.   0072b    85 d2         test     edx, edx
  5792.   0072d    59         pop     ecx
  5793.   0072e    89 55 c0     mov     DWORD PTR _rgdwPointRepsTemp$[ebp], edx
  5794.   00731    75 0c         jne     SHORT $L56815
  5795. $L57658:
  5796.  
  5797. ; 852  :         {
  5798. ; 853  :             hr = E_OUTOFMEMORY;
  5799.  
  5800.   00733    c7 45 fc 0e 00
  5801.     07 80         mov     DWORD PTR _hr$[ebp], -2147024882 ; 8007000eH
  5802.  
  5803. ; 928  :     }
  5804. ; 929  : 
  5805. ; 930  :     *ppMesh = ptmMesh;
  5806.  
  5807.   0073a    e9 04 01 00 00     jmp     $e_Exit$56695
  5808. $L56815:
  5809.  
  5810. ; 854  :             goto e_Exit;
  5811. ; 855  :         }
  5812. ; 856  : 
  5813. ; 857  :         // load the point reps into the temp array
  5814. ; 858  :         for (iPoint = 0; iPoint < cVertices; iPoint++)
  5815.  
  5816.   0073f    33 c0         xor     eax, eax
  5817.   00741    85 ff         test     edi, edi
  5818.   00743    76 16         jbe     SHORT $L57651
  5819.   00745    33 c9         xor     ecx, ecx
  5820. $L56818:
  5821.  
  5822. ; 859  :         {
  5823. ; 860  :             rgdwPointRepsTemp[iPoint] = rglvLoaded[iPoint].m_wPointRep;
  5824.  
  5825.   00747    8b 5d 10     mov     ebx, DWORD PTR _rglvLoaded$[ebp]
  5826.   0074a    8b 1b         mov     ebx, DWORD PTR [ebx]
  5827.   0074c    8b 5c 0b 30     mov     ebx, DWORD PTR [ebx+ecx+48]
  5828.   00750    89 1c 82     mov     DWORD PTR [edx+eax*4], ebx
  5829.   00753    40         inc     eax
  5830.   00754    83 c1 44     add     ecx, 68            ; 00000044H
  5831.   00757    3b c7         cmp     eax, edi
  5832.   00759    72 ec         jb     SHORT $L56818
  5833. $L57651:
  5834.  
  5835. ; 861  :         }
  5836. ; 862  : 
  5837. ; 863  :         // if adjacency was provided copy it (remap if faces removed)
  5838. ; 864  :         if (rgdwAdjacencyFile != NULL)
  5839.  
  5840.   0075b    83 7d 28 00     cmp     DWORD PTR _rgdwAdjacencyFile$[ebp], 0
  5841.   0075f    0f 84 9b 00 00
  5842.     00         je     $L56821
  5843.  
  5844. ; 865  :         {
  5845. ; 866  :             if (cFacesActual == cFaces)
  5846.  
  5847.   00765    8b 45 ec     mov     eax, DWORD PTR _cFacesActual$[ebp]
  5848.   00768    3b 45 0c     cmp     eax, DWORD PTR _cFaces$[ebp]
  5849.   0076b    75 1b         jne     SHORT $L56822
  5850.  
  5851. ; 867  :             {
  5852. ; 868  :                 memcpy(pdwAdjacency, rgdwAdjacencyFile, sizeof(DWORD) * 3 * cFacesActual);
  5853.  
  5854.   0076d    8b 7d 20     mov     edi, DWORD PTR _pdwAdjacency$[ebp]
  5855.   00770    8b ce         mov     ecx, esi
  5856.   00772    8b 75 28     mov     esi, DWORD PTR _rgdwAdjacencyFile$[ebp]
  5857.   00775    8b c1         mov     eax, ecx
  5858.   00777    c1 e9 02     shr     ecx, 2
  5859.   0077a    f3 a5         rep movsd
  5860.   0077c    8b c8         mov     ecx, eax
  5861.   0077e    83 e1 03     and     ecx, 3
  5862.   00781    f3 a4         rep movsb
  5863.  
  5864. ; 869  :             }
  5865. ; 870  :             else
  5866.  
  5867.   00783    e9 9e 00 00 00     jmp     $L56851
  5868. $L56822:
  5869.  
  5870. ; 871  :             {
  5871. ; 872  :                 rgdwFaceRemap = new DWORD[cFaces];
  5872.  
  5873.   00788    8b 75 0c     mov     esi, DWORD PTR _cFaces$[ebp]
  5874.   0078b    8b c6         mov     eax, esi
  5875.   0078d    c1 e0 02     shl     eax, 2
  5876.   00790    50         push     eax
  5877.   00791    e8 00 00 00 00     call     ??2@YAPAXI@Z        ; operator new
  5878.   00796    8b d8         mov     ebx, eax
  5879.  
  5880. ; 873  :                 if (rgdwFaceRemap == NULL)
  5881.  
  5882.   00798    85 db         test     ebx, ebx
  5883.   0079a    59         pop     ecx
  5884.   0079b    89 5d bc     mov     DWORD PTR _rgdwFaceRemap$[ebp], ebx
  5885.  
  5886. ; 928  :     }
  5887. ; 929  : 
  5888. ; 930  :     *ppMesh = ptmMesh;
  5889.  
  5890.   0079e    74 93         je     SHORT $L57658
  5891.   007a0    33 d2         xor     edx, edx
  5892.   007a2    33 c0         xor     eax, eax
  5893.   007a4    33 c9         xor     ecx, ecx
  5894. $L56830:
  5895.   007a6    8b 7d 08     mov     edi, DWORD PTR _rglfFaces$[ebp]
  5896.   007a9    8b 3f         mov     edi, DWORD PTR [edi]
  5897.   007ab    83 3c 39 ff     cmp     DWORD PTR [ecx+edi], -1
  5898.   007af    75 06         jne     SHORT $L56833
  5899.  
  5900. ; 874  :                 {
  5901. ; 875  :                     hr = E_OUTOFMEMORY;
  5902. ; 876  :                     goto e_Exit;
  5903. ; 877  :                 }
  5904. ; 878  : 
  5905. ; 879  :                 // generate a remapping to ignore removed faces
  5906. ; 880  :                 for (iFace = iFaceActual = 0; iFace < cFaces; iFace++)
  5907. ; 881  :                 {
  5908. ; 882  :                     if (rglfFaces[iFace].m_wIndices[0] == UNUSED32)
  5909. ; 883  :                     {
  5910. ; 884  :                         rgdwFaceRemap[iFace] = UNUSED32;
  5911.  
  5912.   007b1    83 0c 83 ff     or     DWORD PTR [ebx+eax*4], -1
  5913.  
  5914. ; 885  :                     }
  5915. ; 886  :                     else
  5916.  
  5917.   007b5    eb 04         jmp     SHORT $L56831
  5918. $L56833:
  5919.  
  5920. ; 887  :                     {
  5921. ; 888  :                         rgdwFaceRemap[iFace] = iFaceActual;
  5922.  
  5923.   007b7    89 14 83     mov     DWORD PTR [ebx+eax*4], edx
  5924.  
  5925. ; 889  :                         iFaceActual += 1;
  5926.  
  5927.   007ba    42         inc     edx
  5928. $L56831:
  5929.   007bb    40         inc     eax
  5930.   007bc    83 c1 2c     add     ecx, 44            ; 0000002cH
  5931.   007bf    3b c6         cmp     eax, esi
  5932.   007c1    72 e3         jb     SHORT $L56830
  5933.  
  5934. ; 890  :                     }
  5935. ; 891  :                 }
  5936. ; 892  : 
  5937. ; 893  :                 // now copy and remap the face adjacency
  5938. ; 894  :                 for (iFace = iFaceActual = 0; iFace < cFaces; iFace++)
  5939.  
  5940.   007c3    8b 45 28     mov     eax, DWORD PTR _rgdwAdjacencyFile$[ebp]
  5941.   007c6    89 45 14     mov     DWORD PTR tv2402[ebp], eax
  5942.   007c9    8b 45 20     mov     eax, DWORD PTR _pdwAdjacency$[ebp]
  5943.   007cc    33 f6         xor     esi, esi
  5944. $L56835:
  5945.  
  5946. ; 895  :                 {
  5947. ; 896  :                     if (rgdwFaceRemap[iFace] == UNUSED32)
  5948.  
  5949.   007ce    83 3c b3 ff     cmp     DWORD PTR [ebx+esi*4], -1
  5950.   007d2    74 20         je     SHORT $L56836
  5951.  
  5952. ; 897  :                         continue;
  5953. ; 898  : 
  5954. ; 899  :                     for (iPoint = 0; iPoint < 3; iPoint++)
  5955.  
  5956.   007d4    8b 55 14     mov     edx, DWORD PTR tv2402[ebp]
  5957.   007d7    6a 03         push     3
  5958.   007d9    5f         pop     edi
  5959. $L56839:
  5960.  
  5961. ; 900  :                     {
  5962. ; 901  :                         if (rgdwAdjacencyFile[iFace * 3 + iPoint] != UNUSED32)
  5963.  
  5964.   007da    8b 0a         mov     ecx, DWORD PTR [edx]
  5965.   007dc    83 f9 ff     cmp     ecx, -1
  5966.   007df    74 07         je     SHORT $L56842
  5967.  
  5968. ; 902  :                             pdwAdjacency[iFaceActual * 3 + iPoint] = rgdwFaceRemap[rgdwAdjacencyFile[iFace * 3 + iPoint]];
  5969.  
  5970.   007e1    8b 0c 8b     mov     ecx, DWORD PTR [ebx+ecx*4]
  5971.   007e4    89 08         mov     DWORD PTR [eax], ecx
  5972.  
  5973. ; 903  :                         else
  5974.  
  5975.   007e6    eb 03         jmp     SHORT $L56840
  5976. $L56842:
  5977.  
  5978. ; 904  :                             pdwAdjacency[iFaceActual * 3 + iPoint] = UNUSED32;
  5979.  
  5980.   007e8    83 08 ff     or     DWORD PTR [eax], -1
  5981. $L56840:
  5982.  
  5983. ; 897  :                         continue;
  5984. ; 898  : 
  5985. ; 899  :                     for (iPoint = 0; iPoint < 3; iPoint++)
  5986.  
  5987.   007eb    83 c2 04     add     edx, 4
  5988.   007ee    83 c0 04     add     eax, 4
  5989.   007f1    4f         dec     edi
  5990.   007f2    75 e6         jne     SHORT $L56839
  5991. $L56836:
  5992.  
  5993. ; 890  :                     }
  5994. ; 891  :                 }
  5995. ; 892  : 
  5996. ; 893  :                 // now copy and remap the face adjacency
  5997. ; 894  :                 for (iFace = iFaceActual = 0; iFace < cFaces; iFace++)
  5998.  
  5999.   007f4    83 45 14 0c     add     DWORD PTR tv2402[ebp], 12 ; 0000000cH
  6000.   007f8    46         inc     esi
  6001.   007f9    3b 75 0c     cmp     esi, DWORD PTR _cFaces$[ebp]
  6002.   007fc    72 d0         jb     SHORT $L56835
  6003.  
  6004. ; 905  :                     }
  6005. ; 906  : 
  6006. ; 907  :                     iFaceActual += 1;
  6007. ; 908  :                 }
  6008. ; 909  : 
  6009. ; 910  :             }
  6010. ; 911  :         }
  6011. ; 912  :         // if point rep data provided, use it to generate adjacency
  6012. ; 913  :         else if (bUsePointRepData)
  6013.  
  6014.   007fe    eb 26         jmp     SHORT $L56851
  6015. $L56821:
  6016.   00800    83 7d 24 00     cmp     DWORD PTR _bUsePointRepData$[ebp], 0
  6017.  
  6018. ; 914  :         {
  6019. ; 915  :             hr = ptmMesh->ConvertPointRepsToAdjacency(rgdwPointRepsTemp, pdwAdjacency);
  6020.  
  6021.   00804    8b 45 f8     mov     eax, DWORD PTR _ptmMesh$[ebp]
  6022.   00807    ff 75 20     push     DWORD PTR _pdwAdjacency$[ebp]
  6023.   0080a    8b 08         mov     ecx, DWORD PTR [eax]
  6024.   0080c    74 07         je     SHORT $L56845
  6025.   0080e    52         push     edx
  6026.   0080f    50         push     eax
  6027.   00810    ff 51 50     call     DWORD PTR [ecx+80]
  6028.  
  6029. ; 916  :             if (FAILED(hr))
  6030. ; 917  :                 goto e_Exit;
  6031. ; 918  :         }
  6032. ; 919  :         else  // generate adjacency based on position of vertices
  6033.  
  6034.   00813    eb 0a         jmp     SHORT $L57657
  6035. $L56845:
  6036.  
  6037. ; 920  :         {
  6038. ; 921  :             hr = ptmMesh->GenerateAdjacency(0.0f, pdwAdjacency);
  6039.  
  6040.   00815    51         push     ecx
  6041.   00816    d9 ee         fldz
  6042.   00818    d9 1c 24     fstp     DWORD PTR [esp]
  6043.   0081b    50         push     eax
  6044.   0081c    ff 51 58     call     DWORD PTR [ecx+88]
  6045. $L57657:
  6046.  
  6047. ; 922  :             if (FAILED(hr))
  6048.  
  6049.   0081f    85 c0         test     eax, eax
  6050.   00821    89 45 fc     mov     DWORD PTR _hr$[ebp], eax
  6051.   00824    7c 1d         jl     SHORT $e_Exit$56695
  6052. $L56851:
  6053.  
  6054. ; 923  :                 goto e_Exit;
  6055. ; 924  :         }
  6056. ; 925  : 
  6057. ; 926  :         *ppbufAdjacency = pbufAdjacency;
  6058.  
  6059.   00826    8b 45 e8     mov     eax, DWORD PTR _pbufAdjacency$[ebp]
  6060.   00829    8b 4d 3c     mov     ecx, DWORD PTR _ppbufAdjacency$[ebp]
  6061.  
  6062. ; 927  :         pbufAdjacency = NULL;
  6063.  
  6064.   0082c    83 65 e8 00     and     DWORD PTR _pbufAdjacency$[ebp], 0
  6065.   00830    89 01         mov     DWORD PTR [ecx], eax
  6066. $L56806:
  6067.  
  6068. ; 928  :     }
  6069. ; 929  : 
  6070. ; 930  :     *ppMesh = ptmMesh;
  6071.  
  6072.   00832    8b 45 38     mov     eax, DWORD PTR _ppMesh$[ebp]
  6073.   00835    8b 4d f8     mov     ecx, DWORD PTR _ptmMesh$[ebp]
  6074.   00838    89 08         mov     DWORD PTR [eax], ecx
  6075.   0083a    eb 07         jmp     SHORT $e_Exit$56695
  6076. $L56739:
  6077.  
  6078. ; 694  :     {
  6079. ; 695  :         hr = D3DXERR_LOADEDMESHASNODATA;
  6080.  
  6081.   0083c    c7 45 fc 5a 0b
  6082.     76 88         mov     DWORD PTR _hr$[ebp], -2005529766 ; 88760b5aH
  6083. $e_Exit$56695:
  6084.  
  6085. ; 931  : e_Exit:
  6086. ; 932  :     if (rgiAttribIds != NULL)
  6087.  
  6088.   00843    33 f6         xor     esi, esi
  6089.   00845    39 75 dc     cmp     DWORD PTR _rgiAttribIds$[ebp], esi
  6090.   00848    5f         pop     edi
  6091.   00849    5b         pop     ebx
  6092.   0084a    74 09         je     SHORT $L56853
  6093.  
  6094. ; 933  :     {
  6095. ; 934  :         ptmMesh->UnlockAttributeBuffer();
  6096.  
  6097.   0084c    8b 45 f8     mov     eax, DWORD PTR _ptmMesh$[ebp]
  6098.   0084f    8b 08         mov     ecx, DWORD PTR [eax]
  6099.   00851    50         push     eax
  6100.   00852    ff 51 64     call     DWORD PTR [ecx+100]
  6101. $L56853:
  6102.  
  6103. ; 935  :     }
  6104. ; 936  :     if (pvFaces != NULL)
  6105.  
  6106.   00855    39 75 d8     cmp     DWORD PTR _pvFaces$[ebp], esi
  6107.   00858    74 09         je     SHORT $L56854
  6108.  
  6109. ; 937  :     {
  6110. ; 938  :         ptmMesh->UnlockIndexBuffer();
  6111.  
  6112.   0085a    8b 45 f8     mov     eax, DWORD PTR _ptmMesh$[ebp]
  6113.   0085d    8b 08         mov     ecx, DWORD PTR [eax]
  6114.   0085f    50         push     eax
  6115.   00860    ff 51 48     call     DWORD PTR [ecx+72]
  6116. $L56854:
  6117.  
  6118. ; 939  :     }
  6119. ; 940  : 
  6120. ; 941  :     delete []rgdwPointRepsTemp;
  6121.  
  6122.   00863    ff 75 c0     push     DWORD PTR _rgdwPointRepsTemp$[ebp]
  6123.   00866    e8 00 00 00 00     call     ??3@YAXPAX@Z        ; operator delete
  6124.  
  6125. ; 942  :     delete []rgdwFaceRemap;
  6126.  
  6127.   0086b    ff 75 bc     push     DWORD PTR _rgdwFaceRemap$[ebp]
  6128.   0086e    e8 00 00 00 00     call     ??3@YAXPAX@Z        ; operator delete
  6129.  
  6130. ; 943  : 
  6131. ; 944  :     GXRELEASE(pbufAdjacency);
  6132.  
  6133.   00873    8b 45 e8     mov     eax, DWORD PTR _pbufAdjacency$[ebp]
  6134.   00876    3b c6         cmp     eax, esi
  6135.   00878    59         pop     ecx
  6136.   00879    59         pop     ecx
  6137.   0087a    74 09         je     SHORT $L56858
  6138.   0087c    8b 08         mov     ecx, DWORD PTR [eax]
  6139.   0087e    50         push     eax
  6140.   0087f    ff 51 08     call     DWORD PTR [ecx+8]
  6141.   00882    89 75 e8     mov     DWORD PTR _pbufAdjacency$[ebp], esi
  6142. $L56858:
  6143.  
  6144. ; 945  : 
  6145. ; 946  :     if (pvPoints != NULL)
  6146.  
  6147.   00885    39 75 d4     cmp     DWORD PTR _pvPoints$[ebp], esi
  6148.   00888    74 09         je     SHORT $L56861
  6149.  
  6150. ; 947  :     {
  6151. ; 948  :         ptmMesh->UnlockVertexBuffer();
  6152.  
  6153.   0088a    8b 45 f8     mov     eax, DWORD PTR _ptmMesh$[ebp]
  6154.   0088d    8b 08         mov     ecx, DWORD PTR [eax]
  6155.   0088f    50         push     eax
  6156.   00890    ff 51 40     call     DWORD PTR [ecx+64]
  6157. $L56861:
  6158.  
  6159. ; 949  :     }
  6160. ; 950  : 
  6161. ; 951  :     if (FAILED(hr))
  6162.  
  6163.   00893    39 75 fc     cmp     DWORD PTR _hr$[ebp], esi
  6164.   00896    7d 0d         jge     SHORT $L56866
  6165.  
  6166. ; 952  :         GXRELEASE(ptmMesh);
  6167.  
  6168.   00898    8b 45 f8     mov     eax, DWORD PTR _ptmMesh$[ebp]
  6169.   0089b    3b c6         cmp     eax, esi
  6170.   0089d    74 06         je     SHORT $L56866
  6171.   0089f    8b 08         mov     ecx, DWORD PTR [eax]
  6172.   008a1    50         push     eax
  6173.   008a2    ff 51 08     call     DWORD PTR [ecx+8]
  6174. $L56866:
  6175.  
  6176. ; 953  : 
  6177. ; 954  :     return hr;
  6178.  
  6179.   008a5    8b 45 fc     mov     eax, DWORD PTR _hr$[ebp]
  6180.   008a8    5e         pop     esi
  6181.  
  6182. ; 955  : }
  6183.  
  6184.   008a9    c9         leave
  6185.   008aa    c3         ret     0
  6186. ?SetMesh@GXU@@YAJAAPAUSLoadedFace@1@KAAPAUSLoadVertex@1@KPAUSCorner@1@KPAUSFVFData@1@HPAKKKPAUIDirect3DDevice9@@PAPAUID3DXMesh@@PAPAUID3DXBuffer@@@Z ENDP ; GXU::SetMesh
  6187. _TEXT    ENDS
  6188. END
  6189.